定义规则标识符ANTLR

问题描述:

我试图写一个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://*.com/questions/28661601/antlr-ambiguity-issue)[wanting](http://*.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

至少有趣的是,在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