Есть ли способ указать зависимый от порядка "хотя бы один из них" в antlr4? - PullRequest
1 голос
/ 14 января 2020

У меня есть правило:

element
    : first
    | second
    | first second
    ;

Я могу немного уменьшить его:

element
    : first
    | first? second
    ;

Есть ли лучший способ написать это? Что-то вроде first <andor> second, где <andor> - это волхвы c, которые мне нужны?

Тот же вопрос для правил лексера:

FP
    : [0-9]+ '.' [0-9]*
    | [0-9]* '.' [0-9]+

1 Ответ

1 голос
/ 14 января 2020

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

element
    : first second?
    | second
    ;
...