问题标签 [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.

0 投票
2 回答
738 浏览

python - 如何从正则表达式中排除某些可能性?

对于我正在创建的解析器,我使用这个正则表达式作为 ID 的定义:

(对于不熟悉我正在使用的特定解析器语法的任何人,“i”标志仅表示不区分大小写。)

我也有一些关键字,像这样:

问题是,由于语法中的一些歧义,有时关键字被视为 ID,而我真的不希望它们如此。所以我在考虑是否可以重写 ID 的正则表达式,使关键字根本不匹配。这样的事情可能吗?

为了提供更多上下文,我使用 Python 的Lark解析器库。Lark 提供的 Earley 解析器(与动态词法分析器一起)在处理模棱两可的语法方面非常灵活和强大,但它们有时会做这样奇怪的事情(而且是非确定性的!)。所以我试图在这里给解析器一些帮助,通过使关键字永远不匹配 ID 规则。

0 投票
1 回答
453 浏览

python - Lark 解析器语法适用于 Earley,但不适用于 LALR

考虑一下Python Lark 解析器的这个简单测试:

这适用于parser='earley'但它失败了parser='lalr'。我不明白为什么。错误信息是:

UnexpectedCharacters:在第 2 列第 12 行没有为“{”定义终端

内部:{

这只是一个 MWE。我的实际语法也遇到了同样的问题。

0 投票
1 回答
243 浏览

python-3.7 - 无法从 Lark AST 获取值

我不能也不知道如何检索我使用 Lark 解析器生成的 AST 的值。

我的语法如下,保存在 .lark 文件中:

然后我运行:

并得到:

但是,现在呢?

我意识到我可能必须构建一个转换器,但是我应该定义哪些方法以及我应该如何称呼它们?我只想将 AMOUNT、un_handle、p_handle(可能有多个 p_handle)和 message 的值提取到 Python 变量中。

非常感谢您!已经调试了几个小时。

0 投票
1 回答
60 浏览

lark-parser - 节点深度编码为星数

这种语言的文档看起来像

深度级别的数量是无限的。我想知道如何获得一个可以适当地构建嵌套树的解析器。我一直在寻找压头示例以获取灵感,但我还没有弄清楚。

0 投票
1 回答
86 浏览

python - 解析语法时发生移位减少冲突

我正在使用来自 lark-parser 库的 LALR(1) 解析。我写了一个语法来解析类似 ORM 的语言。我的语言示例粘贴在下面:

我的语法是:

当我解析语言时,它会被正确解析,但我会收到 shift-reduce 冲突警告。我相信这是由于在 处发生碰撞object: "." (CNAME|operation),但我可能错了。有没有其他方法可以写这个语法?

0 投票
1 回答
255 浏览

python - 使用 lark 解析器(ebnf 语法)解析罗马数字时出现 UnexpectedCharacters 错误

我在 lark-parser 中使用以下语法来解析字母和罗马数字。语法如下:

当我使用此规则并解析以下文本时,出现异常:

对于我的一生,我想不出为什么这会引发异常。但这很好:

0 投票
1 回答
228 浏览

python - Lark:如何让字面量出现在树中

使用 Python。在我的语法中,我有这样一行:

我的变压器有相应的功能

但是,args看起来像这样:

因为字面值不包括在内。但是,从这个结构中,我显然不可能知道原始 ip 是否看起来像以下任何一个:

我想我可以用他们自己的规则来掩盖文字,比如

这甚至可能更清洁。但是,我使用的语法是半自动生成的,这需要更多的体力劳动。

有没有办法让我的转换器函数ipv6_compargs参数中也包含文字?

0 投票
2 回答
804 浏览

python - Lark 解析器无法解析字符,即使它们是在规则的正则表达式中定义的

我正在尝试编写一个 SMTP 解析器,并从rfc获取一些引用字符串的信息。所以我有以下语法(取出所有有效的部分,专注于无效的部分):

start解析器的唯一规则是command-rule。

当我输入时"quoted_string",我希望它被解析为:

如您所见,qtextsmtp包含字母数字字符,编码为正则表达式,如 rfc. 但是,当我尝试解析它时,我收到以下消息:

当我输入时,""它按预期工作。

当我更改规则qtextsmtp并交换正则表达式"a"并使输入成为'"a"'它也可以工作。

我将所有规则定义为转换器中的函数,非常基本,如下所示:

但我什至没有达到这些规则,因为正如我所说,它甚至不会解析。

我不太确定为什么正则表达式不起作用。我在其他部分使用这些类型的规则,它们工作得很好,只是这个没有。

0 投票
3 回答
616 浏览

python - LARK:解析:实现导入文件?

你将如何实现一个可以导入文件并仍然使用 LARK 解析它的语法?

费:

0 投票
1 回答
59 浏览

python - LARK:除了最后一个之外,所有的出现?

假设我有以下内容:

这适用于:

但不适用于:

如何使它不需要末端分隔符?