本節講解antlr詞法分析的功能。
id : [a-za-z]+ ; */ match 1-or-more upper or lowercase letters
id : (『a』..』z』|』a』..』z』)+ ; /* match 1-or-more upper or lowercase letters
grammar keywordtest;
enumdef : 『enum』 『』 ; //詞法規則id也可以匹配enum
… for : 『for』 ;//詞法規則id也可以匹配for
… id : [a-za-z]+ ; // does not match 『enum』 or 『for』
規則id也能夠匹配關鍵字,例如enum和for,這意味多餘乙個規則可以匹配相同的字串。
antlr收集分割所有的字串,語法規則。enum被詞法規則id匹配,立即送入語法規則enumdef。
antlr詞法器消除詞法規則間歧義,通過宣告規則的次序。這意味著id規則應當在所有關鍵字之後,就像 rule。
int : 『0』..』9』+ ; // match 1 or more digits
or int : [0-9]+ ; // match 1 or more digits
string : 『」』 .*? 『」』 ; // match anything in 「…」
允許字串中出現引號
string: 『」』 (esc|.)*? 『」』 ;
fragment
esc : 『\\」』 | 『\\\\』 ; // 2-char sequences \」 and
將注釋去掉
line_comment : 『/』 .*? 『\r』? 『\n』 -> skip ; / match 「*/」 stuff 『\n』
comment : 『/*』 .*? 『**』 -> skip ; / match 「/* 」 stuff 「*」
語法分析器中需要匹配,然後丟棄的東西。語法分析器需要見到的東西。
例如,空白,注釋。
如果不丟棄,那麼語法分析器就會去檢測記號之間是否有空白或者注釋。
詞法分析器中匹配一般的記號
例如,identifiers,keywords,strings,andnumbers。
這部分工作如果交給語法分析器會產生額外的開銷,因此不能交給語法分析器。
將語法分析器不需要區分的多個記號,組合成乙個詞法記號。
例如,如果應用等同處理整型和浮點型別,可以將他們組成記號型別 number。不需要單獨處理,交給語法器。
將語法分析器需要區分的多個記號,詞法記號需要向語法器提供不同的記號。
例如id位址,如果需要識別4個字段,就不能只提供乙個大字串
編譯原理 詞法分析(二)
乙個有窮自動機可以把乙個描述詞素的模式變成乙個詞法分析器,從本質上來講,有窮自動機是與狀態轉換圖相類似的圖,它有以下特點 乙個不確定的有窮自動機 nondeterministic finite automate,下文簡稱nfa 由以下部分組成 從nfa的組成部分可以看出,它和狀態轉換圖的不同之處在於...
編譯原理(二)詞法分析
1.詞法分析程式的功能 2.實現方案 3.單詞種類及輸出形式 單詞種類 保留字 識別符號 常數 分界符等。輸出形式 二元式,單詞類別,單詞值 按單詞種類分類,也可以將保留字和界符採用一符一類。狀態圖 用於識別 接受 一定的字串。包含乙個初始狀態 初態 至少乙個終止狀態 終態 畫法比較簡單 注意 1....
編譯原理(二)詞法分析 1 詞法分析中的若干問題
2.詞法分析器的作用與工作方式 編譯原理部落格列表 概念 模擬程式中的變數 關係 記號 記號的類別 記號的屬性 值 記號的類別 單詞舉例 模式的非形式化描述 const 01 const const if 03 ifif relation 81 或 或 id 82 pi,count,d2 字母打頭的...