0
我有以下简单ANTLR语法:简单的语法无法解析
grammar Grammar;
grammarRules : grammarRule+ ;
grammarRule:
lhs '->' WORD+
;
lhs: ID ;
WORD : LETTER+ ;
ID : LETTER (LETTER|'0'..'9')* ;
fragment
LETTER : [a-zA-Z\u0080-\u00FF_] ;
WS : [ \t] -> skip ;
当我尝试解析字符串“网页 - >谷歌搜索”,我得到的错误:
line 1:0 mismatched input 'webpage' expecting ID
好吧,看起来更大的一点是,词法分析器作为完全不同于解析器步骤的自己的层运行,因此词法分析器有责任确定在出现歧义时应该怎么做。在这方面,我很好奇为什么添加一个语句终结者来解决歧义问题。 –
@DanielBigham你是对的。这可能还不够。你必须做一些事情,比如'lhs - > ID | WORD'。由于ANTLR解析器是LL(*),所以您可能不需要行终止符。 (如果他们只是LL(1)) – Gene
对于后来可能会发现这种情况的其他人 - 我用Antlr拉着我的头发出现各种奇怪的行为,然后我读了一些关于重构我的语法的东西,以便主要语法包含在一个单一的规则中,而不是用不同的符号分解成许多规则。这显然可以使语法的左递归得到更好的处理。 Presto现在运行良好。 –