问题标签 [lark-parser]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何从正则表达式中排除某些可能性?
对于我正在创建的解析器,我使用这个正则表达式作为 ID 的定义:
(对于不熟悉我正在使用的特定解析器语法的任何人,“i”标志仅表示不区分大小写。)
我也有一些关键字,像这样:
问题是,由于语法中的一些歧义,有时关键字被视为 ID,而我真的不希望它们如此。所以我在考虑是否可以重写 ID 的正则表达式,使关键字根本不匹配。这样的事情可能吗?
为了提供更多上下文,我使用 Python 的Lark解析器库。Lark 提供的 Earley 解析器(与动态词法分析器一起)在处理模棱两可的语法方面非常灵活和强大,但它们有时会做这样奇怪的事情(而且是非确定性的!)。所以我试图在这里给解析器一些帮助,通过使关键字永远不匹配 ID 规则。
python - Lark 解析器语法适用于 Earley,但不适用于 LALR
考虑一下Python Lark 解析器的这个简单测试:
这适用于parser='earley'
但它失败了parser='lalr'
。我不明白为什么。错误信息是:
UnexpectedCharacters:在第 2 列第 12 行没有为“{”定义终端
内部:{
这只是一个 MWE。我的实际语法也遇到了同样的问题。
python-3.7 - 无法从 Lark AST 获取值
我不能也不知道如何检索我使用 Lark 解析器生成的 AST 的值。
我的语法如下,保存在 .lark 文件中:
然后我运行:
并得到:
但是,现在呢?
我意识到我可能必须构建一个转换器,但是我应该定义哪些方法以及我应该如何称呼它们?我只想将 AMOUNT、un_handle、p_handle(可能有多个 p_handle)和 message 的值提取到 Python 变量中。
非常感谢您!已经调试了几个小时。
lark-parser - 节点深度编码为星数
这种语言的文档看起来像
深度级别的数量是无限的。我想知道如何获得一个可以适当地构建嵌套树的解析器。我一直在寻找压头示例以获取灵感,但我还没有弄清楚。
python - 解析语法时发生移位减少冲突
我正在使用来自 lark-parser 库的 LALR(1) 解析。我写了一个语法来解析类似 ORM 的语言。我的语言示例粘贴在下面:
我的语法是:
当我解析语言时,它会被正确解析,但我会收到 shift-reduce 冲突警告。我相信这是由于在 处发生碰撞object: "." (CNAME|operation)
,但我可能错了。有没有其他方法可以写这个语法?
python - 使用 lark 解析器(ebnf 语法)解析罗马数字时出现 UnexpectedCharacters 错误
我在 lark-parser 中使用以下语法来解析字母和罗马数字。语法如下:
当我使用此规则并解析以下文本时,出现异常:
对于我的一生,我想不出为什么这会引发异常。但这很好:
python - Lark:如何让字面量出现在树中
使用 Python。在我的语法中,我有这样一行:
我的变压器有相应的功能
但是,args
看起来像这样:
因为字面值不包括在内。但是,从这个结构中,我显然不可能知道原始 ip 是否看起来像以下任何一个:
我想我可以用他们自己的规则来掩盖文字,比如
这甚至可能更清洁。但是,我使用的语法是半自动生成的,这需要更多的体力劳动。
有没有办法让我的转换器函数ipv6_comp
在args
参数中也包含文字?
python - Lark 解析器无法解析字符,即使它们是在规则的正则表达式中定义的
我正在尝试编写一个 SMTP 解析器,并从rfc获取一些引用字符串的信息。所以我有以下语法(取出所有有效的部分,专注于无效的部分):
start
解析器的唯一规则是command
-rule。
当我输入时"quoted_string"
,我希望它被解析为:
如您所见,qtextsmtp
包含字母数字字符,编码为正则表达式,如 rfc. 但是,当我尝试解析它时,我收到以下消息:
当我输入时,""
它按预期工作。
当我更改规则qtextsmtp
并交换正则表达式"a"
并使输入成为'"a"'
它也可以工作。
我将所有规则定义为转换器中的函数,非常基本,如下所示:
但我什至没有达到这些规则,因为正如我所说,它甚至不会解析。
我不太确定为什么正则表达式不起作用。我在其他部分使用这些类型的规则,它们工作得很好,只是这个没有。
python - LARK:解析:实现导入文件?
你将如何实现一个可以导入文件并仍然使用 LARK 解析它的语法?
费:
python - LARK:除了最后一个之外,所有的出现?
假设我有以下内容:
这适用于:
但不适用于:
如何使它不需要末端分隔符?