2013-03-19 5 views
0

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

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

Реальная проблема немного сложнее, но это по-прежнему в основном то же самое.

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

ответ

0

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