Я пишу синтаксический анализатор на PLY для языка, который состоит из двух подъязыков: «нормального» языка выражений и языка аннотаций типов. Проблема в том, что у них есть общие токены, и их приоритет различается между двумя языками.

Например, в языке выражений a | b, c должен быть эквивалентен (a | b), c (и означает то же, что и в Python), тогда как в языке типов то же самое должно быть эквивалентно a | (b, c) (любой тип a или тип b, c, то есть кортеж с элементами типа b и типа c).

Настоящая проблема немного сложнее, но в основном все та же.

Можно ли в PLY временно изменить приоритет? Если нет, могу ли я применить другое решение?

0
Jasmijn 19 Мар 2013 в 17:26

1 ответ

Лучший ответ

Оказывается, вы можете использовать %prec fakeToken в конце производства с другим приоритетом и вставить facetoken в нужное место в списке приоритетов.

0
Jasmijn 19 Мар 2013 в 18:32