简单语法解析失败
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 不会那样做。 (您可能不希望它这样做,因为这会使词法分析器变得复杂并因此大大减慢它的速度。)
您可以通过在您的语言中添加换行符或分号等语句终止符来解决此问题。
我有以下简单的 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 不会那样做。 (您可能不希望它这样做,因为这会使词法分析器变得复杂并因此大大减慢它的速度。)
您可以通过在您的语言中添加换行符或分号等语句终止符来解决此问题。