3

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

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'

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

4

1 回答 1

1

词法分析器似乎被这两条规则弄糊涂了:

ALPHA : 'A'..'Z';

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

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

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

ALPHA : 'A'..'Z';
于 2018-09-13T13:26:52.467 回答