Что не так с этой грамматикой мошенника? - PullRequest
0 голосов
/ 04 мая 2018

Итак, я пытаюсь заставить эту грамматику работать, но она выдает ошибку. Это происходит от @ context = "num" внутри лексического числа. Это говорит мне, что это неоднозначно, кто-нибудь может сказать мне, почему?

start syntax Statement = Type Id "=" Number ";" ;   

lexical Id = @context="id" [a-z] !<< [a-z]+ !>> [a-z] \ Type;

lexical Number = @context="num" [0-9]+;

keyword Type = @context="type" ("int"|"str"|"float");

Это действительно странно, потому что работает без тега @context, но когда я добавляю его, я вдруг не могу импортировать / найти символ Statement в другом модуле. Или это дает мне грамматику неоднозначную ошибку.

пожалуйста, помогите

** редактировать: ** Если я изменю ключевое слово Type на нормальный лексический тип, тогда, с круглыми скобками или без них, проблема останется.

1 Ответ

0 голосов
/ 05 мая 2018

Не думаю, что вы должны анализировать ключевые слова как лексические, так как это, как правило, сочетание многих вещей.

И ключевые слова должны быть обычным списком операций с простыми литералами. Он не работает с произвольными регулярными выражениями.

Итак, причина, по которой это работает без контекста, я предполагаю из-за того, что вы также удаляете скобки, что превращает его в общий список альтернатив?

...