ANTLR 4.5给我一个“不匹配的输入'String []'期待'String'”但我不明白为什么'[]'被包含在令牌中。
我已将语法剥离到最低限度以显示问题:
grammar Test;
@header
{
package parser;
}
mainClass : 'class' ID '{' 'void' 'main' '(' 'String' '[' ']' ID ')' '}' ;
ID : [a-zA-Z] [a-zA-z0-9]* ;
WS : [ \t\f\r\n]+ -> channel(HIDDEN);
输入是:
class A
{
void main(String[] args)
}
如果我使用'String []',那么输入就会被成功解析。
如果我从解析树打印出令牌,那么它们看起来都像我期望的那样,除了'String []'被显示为一个ID令牌而不是3个单独的令牌。
我试过明确定义'String','['和']'标记,但结果是一样的。
我无法弄清楚出了什么问题。
答案 0 :(得分:0)
尝试为每个令牌定义词法分析器规则。我想知道如何用这个语法生成你的解析器。 ANTLR通常会发出一条消息,指出它无法从文字中隐式生成词法分析器。
答案 1 :(得分:0)
哦看到你期望在那里的危险哦。
我使用相同的结果更改了所有令牌。
然后我更改了ID lexer规则以使用2个片段,一个用于字母,一个用于数字,并且它有效!
我改回原来的规则,它仍然有效。
对此问题中发布的版本进行了非常仔细的检查,结果显示问题出现在ID词法分析器规则的大写范围内。它有A-z但应该是A-Z。范围A-z包括\[]^_'
因此问题。