我正在尝试解析我正在编写的一些伪代码,并且在获取符号值时遇到了一些麻烦。它可以成功解析,但是不会返回与“常规”字符相同的值。这是一个例子:

>>> from lark import Lark
>>> parser = Lark('operator: "<" | ">" | "=" | ">=" | "<=" | "!="', start="operator")
>>> parsed = parser.parse(">")
>>> parsed
Tree(operator, [])
>>> parsed.data
'operator'
>>> parsed.value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Tree' object has no attribute 'value'

为什么没有值(value)?还有另一种方法来获取所使用的确切运算符吗?

最佳答案

lark 的作者在这里。迈克的答案是正确的,但获得相同结果的更好方法是使用“!”。规则的前缀:

>>> from lark import Lark
>>> parser = Lark('!operator: "<" | ">" | "=" | ">=" | "<=" | "!="', start="operator")
>>> parser.parse(">")
Tree(operator, [Token(__MORETHAN, '>')])

关于python - 通过Lark解析获取符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46008954/

10-10 15:13