I'm trying to parse expressions made of the binary operator +
, the unary operator not
and identifiers that can be any alphabetical string that isn't not
from pyparsing import (
CaselessKeyword,
Combine,
Word,
alphas,
opAssoc,
infixNotation,
)
identifier = Combine(~CaselessKeyword('not') + Word(alphas))
expression = infixNotation(identifier, [
('+', 2, opAssoc.LEFT),
(CaselessKeyword('not'), 1, opAssoc.RIGHT),
]
Running
expression.parseString('a + (not b)')
gives what I expect
[['a', '+', ['not', 'b']]]
However, without the parentheses
expression.parseString('a + not b')
I only get the first token:
['a']
How can I define the language to work as I would like without the parentheses?
(In the real case there are more operators and reserved words: this is a step towards parsing the S3 Select language)
from Parse expression with binary and unary operators, reserved words, and without parentheses
No comments:
Post a Comment