通过Lark解析获取符号 [英] Getting symbols with Lark parsing

查看:139
本文介绍了通过Lark解析获取符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to parse a little pseudo-code I'm writing and having some trouble getting values for symbols. It parses successfully, but it won't return a value the same as it would with "regular" characters. Here's an example:

>>> 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'

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

Why wouldn't there be a value? Is there another way to get the exact operator that was used?

推荐答案

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

Author of Lark here. Mike's answer is accurate, but a better way to get the same result is by using the "!" prefix on the rule:

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

这篇关于通过Lark解析获取符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆