我正在一个项目上,我必须为以下语法创建一个解析器:
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'
似乎语法有问题,但我无法弄清楚。 你有什么线索吗?
答案 0 :(得分:1)
这两个规则似乎使词法分析器感到困惑:
ALPHA : 'A'..'Z';
ALPH : ('a'..'z' | 'A'..'Z');
由于ChanOut_S
的第一个字母与规则ALPHA匹配,因此C被该词法分析器规则占用。如果您切换这两个规则的顺序,则会识别出整个标识符。
ALPH : ('a'..'z' | 'A'..'Z');
ALPHA : 'A'..'Z';