简单语法解析失败

Simple Grammar Fails to Parse

我有以下简单的 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 ;

当我尝试解析字符串 "webpage -> google search" 时,出现错误:

line 1:0 mismatched input 'webpage' expecting ID

你的语法有问题。 WORD 的定义匹配 webpage。这就是词法分析器 returns,所以解析器抱怨没有看到 ID

如果您尝试解析 webpage1 -> google search 它应该可以工作,因为 webpage1 不是 WORD

语法不是 LL(*)。给出例如输入 a -> b c d -> e f,解析器需要提前查看第二个 -> 以便将信息反馈给词法分析器,从而将 d 识别为 ID而不是 WORD。 ANTLER 不会那样做。 (您可能不希望它这样做,因为这会使词法分析器变得复杂并因此大大减慢它的速度。)

您可以通过在您的语言中添加换行符或分号等语句终止符来解决此问题。