问题标签 [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 投票
1 回答
2720 浏览

python - python lark解析器中如何平衡规则和终端?

我正在使用 lark,一个优秀的python 解析库

它提供了 Earley 和 LALR(1) 解析器,并通过自定义EBNF格式定义。(EBNF 代表扩展巴科斯-瑙尔形式)。

小写定义是规则,大写定义是终端。Lark 还为大写定义提供了权重,以优先匹配。

我正在尝试定义语法,但我陷入了一种我似乎无法平衡的行为。

我对未命名的文字(双引号之间的字符串或字符)有一些规则:

它适用于 99% 的用例。但是,如果在我解析的语言中,我使用了一个directive叫做 directive,那么一切都会中断:

在这里,当字符串应该匹配终端时,它会匹配规则directive中未命名的文字。directive_definitionNAME.2

我怎样才能平衡/调整它,以便 LALR(1) 解析器没有歧义?

0 投票
0 回答
237 浏览

python - Python:创建 DSL

我需要解决一些专门的任务,将创建 DSL 与特定目的联系起来。但我没有这方面的经验,经过一番研究,我选择了 python Lark。我需要意识到一些像

我需要在这个 DSL 中实现条件。我看到了很多文档,与它相关联,但只有声明变量,仅此而已。你能分享一些资源来了解更多关于这个图书馆的信息吗

0 投票
0 回答
153 浏览

python - Python:创建语法和实现运算符

我尝试描述语法和运算符。

我使用下一个代码

但它返回

但是我怎样才能实现它并区分字符串和运算符呢?如果我使用没有"to 运算符的声明,我会收到错误

0 投票
1 回答
200 浏览

parsing - 十六进制数的 LARK 解析错误

我尝试解析十六进制数: hex_number : "0x" HEXDIGIT+ 并使用 0xA 作为输入,它总是给我一个错误,A 是意外标记。

0 投票
0 回答
232 浏览

python - Python:从树生成 python 代码

我已经使用 Lark 构建了语法树

我需要从中生成python代码(条件)但我有缩进问题并尝试自动构建代码生成器

但是有额外的缩进,我不知道如何解决这个问题。但我明白了

反而

0 投票
2 回答
1822 浏览

python - 使用 Lark 的语法优先级

我的语法有一个优先问题,我没有更多的想法来解决它。

我正在使用Lark

事情是这样的(我已经尽可能地简化了问题):

输出是:

但我想要的是:

我试图在我的规则中优先考虑,但它不起作用。

你知道我需要改变什么才能让它工作吗?

谢谢

0 投票
1 回答
723 浏览

python - 如何将折叠添加到 QsciLexerCustom 子类?

考虑这个片段:

要运行上面的 mcve,你只需要运行pip install lark-parser PyQt5 QScintilla

我试图弄清楚如何修改LexerJson,以便符号[ ] { }支持折叠。当使用诸如qscilexercpp.cpp之类的现有类时,折叠行为是免费提供给您的,例如,您只需执行以下操作:

折叠可以免费工作......但是当我在发布的 mcve 中使用自定义词法分析器时,我猜你必须自己实现该行为,不幸的是我不知道该怎么做。

所以,这基本上是一个问题,你如何在 QsciLexerCustom 子类上实现折叠?

0 投票
1 回答
1177 浏览

python - Lark 如何描述一系列可选代币

我正在解析一个格式可以包括的文件:

min、max 和 alertIfSold 标记都是可选的,可以以任何顺序出现。那是

都是有效的例子。

下面是我正在测试的语法的简单版本。运行 python test.py 生成此错误:

lark.common.ParseError:检测到无限递归!(规则 <__anon_star_1 : __anon_star_1>)

我尝试使用其他语法规则表达相同的可选标记,结果相似(无限递归)。

表达可选参数的正确语法是什么?

0 投票
1 回答
802 浏览

python - 在 Lark 语法中正确设置规则和终端之间的优先级

这是我第一次使用语法和解析器生成器编写解析器。我想使用云雀python 模块解析某种 asn.1 格式。

这是我尝试解析的数据示例:

该结构可以包含各种节点,并且我无法提前确切知道我应该期望什么标签或标签组合。但是,我希望能够解析一些结构,例如“loc int {...}”部分。

这是我尝试过的语法,我使用数字来定义优先级:

我认为优先级(以附加数字的形式)足以让“loc int”事物优先于更通用的节点类型被识别,但这部分似乎被解析为 asubnodes而不是locus_info当我运行时上述语法的解析器并在上面的一段文本上运行它:

我获得以下内容:

我究竟做错了什么?

注意:我看过一个相关的问题(使用 Lark 的语法优先级),但我看不到如何将其答案应用于我的问题。我不认为我可以完全消除我的语法歧义(真实数据中有太多可能的情况),而且我不明白该ambiguity="explicit"选项应该做什么。


编辑:颠倒优先级

我尝试颠倒优先级,如下所示:

但是,输出完全相同。就像这些优先级被忽略,或者实际上没有歧义,因为我的locus_info规则没有正确指定。

0 投票
0 回答
298 浏览

python - 了解什么是云雀语法中的歧义

我试图简化另一个问题中提出的案例,并使用lark进行了以下解析尝试:

输出:

本例所示,该ambiguity="explicit"选项应该能够显示替代匹配的可能性,前面有一个_ambig标签。这没有出现在上面的输出中。似乎我不明白模棱两可是什么。

为什么“链加”不被认为是模棱两可的?在我看来,它可以与STRAND_INFO或匹配onlytags

同样,我希望 "loc int {...}" 与locus_infoor匹配subnodes