Я хочу проанализировать следующие (упрощенные) рекурсивные выражения с помощью PyParsing:
foo
(foo + bar)
foo'attribute
foo + bar'attribute
foo.field
(foo'attribute + foo.field)'attribute
Я придумал следующий синтаксический анализатор, который работает для всех вышеприведенных выражений:
identifier = Word(alphas)
expr = (
infixNotation(
identifier,
[
(Literal(".") + identifier, 1, opAssoc.LEFT),
(Literal("'") + identifier, 1, opAssoc.LEFT),
(Literal("+"), 2, opAssoc.LEFT),
],
)
+ StringEnd()
)
Что терпит неудачу, однако, это выражения, которые включают .field
и суффикс 'attribute
вместе. В то время как foo.field'attribute
принимается, foo'attribute.field
дает
pyparsing.ParseException: Expected end of text (at char 13), (line:1, col:14)
При обмене кортежей для атрибута и поля infixNotation
, второе выражение анализируется а первый нет. Похоже, порядок / приоритет имеет значение.
Есть идеи, как анализировать произвольные рекурсивные появления различных суффиксов?