ANTLR4 грамматика не жизнеспособная альтернатива при вводе - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю над проектом, и мне нужно создать парсер для следующей грамматики:

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 следующим образом:

теория Грюна Т o.spthy -gui

Но каждый раз, когда я пытаюсь сгенерировать дерево синтаксического анализатора, у меня появляется следующая ошибка:

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

Кажется, у грамматики есть какая-то проблема, но я не могу ее понять. Есть ли у вас какие-либо подсказки?

1 Ответ

0 голосов
/ 13 сентября 2018

Кажется, что лексер запутался в этих двух правилах:

ALPHA : 'A'..'Z';

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

Поскольку первая буква ChanOut_S соответствует правилу ALPHA, C получает это правило лексера. Если вы измените порядок этих двух правил, весь идентификатор будет распознан.

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

ALPHA : 'A'..'Z';
...