2015-02-24 70 views
-1

我試圖寫一個ANTLR語法和規則識別標識和INT文字的寫法如下:定義規則標識符ANTLR

ID : Letter(Letter|Digit|'_')*; 
TOK_INTLIT : [0-9]+ ; 
//this is not the complete grammar btw 

,當輸入爲:

void main(){ 
    int 2a; 
} 

時,詞法分析器是認識爲int文字和一個作爲ID,這是完全合乎邏輯的基礎上,我寫的語法,但我不想2a中的問題得到認可這樣,而是我w螞蟻顯示錯誤,因爲標識符不能以字母之外的其他東西開始......我對這個編譯器課程真的很陌生......在這裏應該做什麼?

+0

爲什麼人們[keep](http://stackoverflow.com/questions/28661601/antlr-ambiguity-issue)[wanting](http://stackoverflow.com/questions/28678232/how-to-create- a-lexical-analyzer-in-antlr-4-that-c​​atch-diiferent-le-le)這個?在解析器中獲得「意外的int」錯誤有什麼問題? – sepp2k 2015-02-24 22:16:11

+1

@ sepp2k:也許這位老師試圖說明一點。也許她的學生應該聚在一起討論問題*而不是問我們。 – rici 2015-02-24 23:00:44

回答

1

至少有趣的是,在C和C++中,2n是無效的數字,而不是無效的標識符。這是因爲C標準器(或者更準確的說是預處理器)根據標準需要10要求來解釋以數字開頭的任何數字和字母序列作爲「預處理器號」。之後,嘗試重新解釋預處理器號碼(如果它仍是預處理代碼的一部分),作爲許多可能的數字語法之一。 2n不是,所以在此時會產生錯誤。

預處理器號碼比這更復雜,但這應該足以提示您爲問題提出一個簡單的解決方案。

+1

獎勵問題:0x7f + 1和0x7e + 2有什麼區別? – rici 2015-02-24 23:08:34

+0

第二個可能被認爲是浮動。 – 2015-02-25 08:12:11