Я пишу парсер в PLY для языка, который состоит из двух подъязыков: «нормального» языка выражений и языка аннотаций типа. Проблема в том, что они разделяют некоторые токены, и этот приоритет отличается между двумя языками.Приоритет для подъязыков
Например, в выражении языка a | b, c
должно быть эквивалентно (a | b), c
(и означает то же самое, как и в Python), в то время как на языке типа то же самое должно быть эквивалентно a | (b, c)
(любого типа a
или тип b, c
, то есть кортеж с элементами типа b
и тип c
).
Реальная проблема немного сложнее, но это по-прежнему в основном то же самое.
Можно ли в PLY временно изменить приоритет? Если нет, будет ли еще одно решение, которое я могу применить?