Я анализирую строки с dotted.strings
и инфиксными математическими операторами.Кажется, что сам синтаксический анализ работает нормально, но имя, возвращаемое getName
, не соответствует ожиданиям.
from pyparsing import (Word, alphas, opAssoc, infixNotation,
Suppress, Group, delimitedList, oneOf)
LPAR, RPAR = map(Suppress, "()")
chars = Word(alphas + "_")
colstr = Group(delimitedList(chars, delim=".")).setResultsName("colstr*")
infix_expr = infixNotation(colstr, [
("-", 1, opAssoc.RIGHT),
(oneOf("* /"), 2, opAssoc.LEFT),
(oneOf("+ -"), 2, opAssoc.LEFT),
])("infix")
Теперь проверяем его ...
>>> infix_ex = infix_expr.parseString('a.b + x.y')
>>> print(infix_ex.dump())
[[['a', 'b'], '+', ['x', 'y']]]
- infix: [['a', 'b'], '+', ['x', 'y']]
- colstr: [['a', 'b'], ['x', 'y']]
[0]:
['a', 'b']
[1]:
['x', 'y']
Вот чтоЯ ожидаю, но getName
, кажется, возвращает имя с неправильного уровня дерева синтаксического анализа.
>>> infix_ex.getName()
'infix'
>>> infix_ex[0].getName()
'colstr'
>>> infix_ex[0].asList()
[['a', 'b'], '+', ['x', 'y']]
Как вы можете видеть, getName
возвращает 'infix' для корневого уровня и 'colstr'для уровня инфикса дерева.