定义规则标识符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蚂蚁显示错误,因为标识符不能以字母之外的其他东西开始......我对这个编译器课程真的很陌生......在这里应该做什么?
至少有趣的是,在C和C++中,2n
是无效的数字,而不是无效的标识符。这是因为C标准器(或者更准确的说是预处理器)根据标准需要10要求来解释以数字开头的任何数字和字母序列作为“预处理器号”。之后,尝试重新解释预处理器号码(如果它仍是预处理代码的一部分),作为许多可能的数字语法之一。 2n
不是,所以在此时会产生错误。
预处理器号码比这更复杂,但这应该足以提示您为问题提出一个简单的解决方案。
奖励问题:0x7f + 1和0x7e + 2有什么区别? – rici 2015-02-24 23:08:34
第二个可能被认为是浮动。 – 2015-02-25 08:12:11
为什么人们[keep](http://*.com/questions/28661601/antlr-ambiguity-issue)[wanting](http://*.com/questions/28678232/how-to-create- a-lexical-analyzer-in-antlr-4-that-catch-diiferent-le-le)这个?在解析器中获得“意外的int”错误有什么问题? – sepp2k 2015-02-24 22:16:11
@ sepp2k:也许这位老师试图说明一点。也许她的学生应该聚在一起讨论问题*而不是问我们。 – rici 2015-02-24 23:00:44