用乘法解析表达式
Parsing expression with multiplication
所以,我有以下解析器
END = Literal(';').suppress()
POINT = Literal('.')
COMMA = Literal(',').suppress()
COLON = Word(':', exact=1).suppress()
EQUAL = Literal('=').suppress()
VARNAME = Word(alphanums, max=3)
DIGIT = Word(nums, exact=1)
SIGN = oneOf('+ -')
OPER = oneOf('+ - * / ^ ')
NATNUM = DIGIT + ZeroOrMore(DIGIT)
REALNUM = Combine(Optional(SIGN) + NATNUM + Optional(POINT)*1 + NATNUM)
EXRPESS = Forward()
EXRPESS << Combine((REALNUM | VARNAME) + ZeroOrMore(OPER*1 + EXRPESS), adjacent=False)
还有表达式,类似于 2*y + 7,它解析正常,不幸的是 2y + 7 也是如此。那么如果 2 和 y 一起出现,如何更改 EXPRESS 以引发异常?
谢谢
两个解析器都有问题
VARNAME = Word(alphas, max=1)
NATNUM = Word(nums) # 1234567890
所以 2y 是变量名,但不是我预期的 Num 和 Var。
谢谢。
所以,我有以下解析器
END = Literal(';').suppress()
POINT = Literal('.')
COMMA = Literal(',').suppress()
COLON = Word(':', exact=1).suppress()
EQUAL = Literal('=').suppress()
VARNAME = Word(alphanums, max=3)
DIGIT = Word(nums, exact=1)
SIGN = oneOf('+ -')
OPER = oneOf('+ - * / ^ ')
NATNUM = DIGIT + ZeroOrMore(DIGIT)
REALNUM = Combine(Optional(SIGN) + NATNUM + Optional(POINT)*1 + NATNUM)
EXRPESS = Forward()
EXRPESS << Combine((REALNUM | VARNAME) + ZeroOrMore(OPER*1 + EXRPESS), adjacent=False)
还有表达式,类似于 2*y + 7,它解析正常,不幸的是 2y + 7 也是如此。那么如果 2 和 y 一起出现,如何更改 EXPRESS 以引发异常? 谢谢
两个解析器都有问题
VARNAME = Word(alphas, max=1)
NATNUM = Word(nums) # 1234567890
所以 2y 是变量名,但不是我预期的 Num 和 Var。 谢谢。