简单的语法不能解析

时间:2016-07-02 04:46:37

标签: antlr

我有以下简单的ANTLR语法:

<ctrb ctrb-type="edit">

当我尝试解析字符串&#34;网页 - &gt;谷歌搜索&#34;,我收到错误:

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 ;

1 个答案:

答案 0 :(得分:0)

你的语法坏了。 WORD的定义与webpage匹配。这是词法分析器返回的内容,因此解析器抱怨没有看到ID

如果您尝试解析webpage1 -> google search它应该有效,因为webpage1不是WORD

语法不是LL(*)。鉴于例如输入a - &gt; b c d - &gt;例如,解析器需要向前看第二个->,以便将信息反馈给词法分析器,从而将d识别为ID而不是WORD 。安特尔不会这样做。 (你可能不会想要它,因为这可能会复杂化并因此大大减慢词法分析器。)

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