ANTLR4语法在输入时没有可行的替代方法

时间:2018-09-13 12:02:19

标签: parsing antlr antlr4 context-free-grammar ambiguous-grammar

我正在一个项目上,我必须为以下语法创建一个解析器:

grammar T;

我正在尝试阅读这段代码:

theory oo
begin

builtins: asymmetric-encryption
functions: f/1  // f/1 used for function in protocol

/* Channel rules */ 

rule ChanOut_S:
    [Out_S($A,$B,xn,x)]
    --[ChanOut_S($A,$B,xn,x)]->
    [!Sec($A,$B,xn,x)]

我曾经使用grun生成解析器树,如下所示:

grun T理论oo.spthy -gui

但是每次我尝试生成解析器树时,都会出现以下错误:

line 9:5 no viable alternative at input 'ruleC'

似乎语法有问题,但我无法弄清楚。 你有什么线索吗?

1 个答案:

答案 0 :(得分:1)

这两个规则似乎使词法分析器感到困惑:

ALPHA : 'A'..'Z';

ALPH : ('a'..'z' | 'A'..'Z');

由于ChanOut_S的第一个字母与规则ALPHA匹配,因此C被该词法分析器规则占用。如果您切换这两个规则的顺序,则会识别出整个标识符。

ALPH : ('a'..'z' | 'A'..'Z');

ALPHA : 'A'..'Z';