Compiler construction ANTLR歧义问题
我有这个语法Compiler construction ANTLR歧义问题,compiler-construction,antlr,Compiler Construction,Antlr,我有这个语法 grammar MyGrammar; prog : lexeme* ; lexeme : TOK_INTLIT : [0-9]+; Identifiers : Letter (Letter | Digit | '_' )* ; fragment Letter : [a-zA-Z] ; fragment Digit : [0-9] ; ... 现在当我输入这个:int2x=20 我期望标识符出现错误,但得到如下输出: Type = TOK_INT value
grammar MyGrammar;
prog : lexeme* ;
lexeme :
TOK_INTLIT : [0-9]+;
Identifiers : Letter (Letter | Digit | '_' )* ;
fragment Letter : [a-zA-Z] ;
fragment Digit : [0-9] ;
...
现在当我输入这个:int2x=20代码>
我期望标识符出现错误,但得到如下输出:
Type = TOK_INT value = [int] Line 1, Column 0,
Type = TOK_INTLIT value = [2] Line 1, Column 4,
Type = Identifiers value = [x] Line 1, Column 5,
2x
正在拆分。我是做错了什么,还是有办法解决这些问题?为什么这是个问题?语法不会拒绝那个标记序列吗?或者int2x=20代码>实际上是合法的吗?在后一种情况下,为什么不应该int2x=20代码>也是合法的吗?为什么你会惊讶于2x
被标记为TOK_INTLIT
,后面跟着标识符
标记?好吧,我想在2x上显示一个错误,因为标识符只能以字母开头。我应该为错误标记放一个语法,以便它识别错误的序列吗?@MissakBoyajian是的,标识符只能以字母开头,而数字可以(而且必须)以数字开头。这不像是标记器告诉您“2x”是一个标识符。它告诉你“2”是一个数字,“x”是一个标识符,这符合规则。如果您有语法规则typedecl:type标识符'='expression';'代码>,则ANTLR将正确地抱怨int2x=20代码>无效,因为您提供了一个需要标识符的数字。这不是你想要的吗?是的,你是对的。谢谢