问题标签 [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 - python lark解析器中如何平衡规则和终端?
我正在使用 lark,一个优秀的python 解析库。
它提供了 Earley 和 LALR(1) 解析器,并通过自定义EBNF
格式定义。(EBNF 代表扩展巴科斯-瑙尔形式)。
小写定义是规则,大写定义是终端。Lark 还为大写定义提供了权重,以优先匹配。
我正在尝试定义语法,但我陷入了一种我似乎无法平衡的行为。
我对未命名的文字(双引号之间的字符串或字符)有一些规则:
它适用于 99% 的用例。但是,如果在我解析的语言中,我使用了一个directive
叫做的 directive
,那么一切都会中断:
在这里,当字符串应该匹配终端时,它会匹配规则directive
中未命名的文字。directive_definition
NAME.2
我怎样才能平衡/调整它,以便 LALR(1) 解析器没有歧义?
python - Python:创建 DSL
我需要解决一些专门的任务,将创建 DSL 与特定目的联系起来。但我没有这方面的经验,经过一番研究,我选择了 python Lark
。我需要意识到一些像
我需要在这个 DSL 中实现条件。我看到了很多文档,与它相关联,但只有声明变量,仅此而已。你能分享一些资源来了解更多关于这个图书馆的信息吗
python - Python:创建语法和实现运算符
我尝试描述语法和运算符。
我使用下一个代码
但它返回
但是我怎样才能实现它并区分字符串和运算符呢?如果我使用没有"
to 运算符的声明,我会收到错误
parsing - 十六进制数的 LARK 解析错误
我尝试解析十六进制数: hex_number : "0x" HEXDIGIT+ 并使用 0xA 作为输入,它总是给我一个错误,A 是意外标记。
python - Python:从树生成 python 代码
我已经使用 Lark 构建了语法树
我需要从中生成python代码(条件)但我有缩进问题并尝试自动构建代码生成器
但是有额外的缩进,我不知道如何解决这个问题。但我明白了
反而
python - 使用 Lark 的语法优先级
我的语法有一个优先问题,我没有更多的想法来解决它。
我正在使用Lark
事情是这样的(我已经尽可能地简化了问题):
输出是:
但我想要的是:
我试图在我的规则中优先考虑,但它不起作用。
你知道我需要改变什么才能让它工作吗?
谢谢
python - 如何将折叠添加到 QsciLexerCustom 子类?
考虑这个片段:
要运行上面的 mcve,你只需要运行pip install lark-parser PyQt5 QScintilla
我试图弄清楚如何修改LexerJson
,以便符号[ ] { }
支持折叠。当使用诸如qscilexercpp.cpp之类的现有类时,折叠行为是免费提供给您的,例如,您只需执行以下操作:
折叠可以免费工作......但是当我在发布的 mcve 中使用自定义词法分析器时,我猜你必须自己实现该行为,不幸的是我不知道该怎么做。
所以,这基本上是一个问题,你如何在 QsciLexerCustom 子类上实现折叠?
python - Lark 如何描述一系列可选代币
我正在解析一个格式可以包括的文件:
min、max 和 alertIfSold 标记都是可选的,可以以任何顺序出现。那是
都是有效的例子。
下面是我正在测试的语法的简单版本。运行 python test.py 生成此错误:
lark.common.ParseError:检测到无限递归!(规则 <__anon_star_1 : __anon_star_1>)
我尝试使用其他语法规则表达相同的可选标记,结果相似(无限递归)。
表达可选参数的正确语法是什么?
python - 在 Lark 语法中正确设置规则和终端之间的优先级
这是我第一次使用语法和解析器生成器编写解析器。我想使用云雀python 模块解析某种 asn.1 格式。
这是我尝试解析的数据示例:
该结构可以包含各种节点,并且我无法提前确切知道我应该期望什么标签或标签组合。但是,我希望能够解析一些结构,例如“loc int {...}”部分。
这是我尝试过的语法,我使用数字来定义优先级:
我认为优先级(以附加数字的形式)足以让“loc int”事物优先于更通用的节点类型被识别,但这部分似乎被解析为 asubnodes
而不是locus_info
当我运行时上述语法的解析器并在上面的一段文本上运行它:
我获得以下内容:
我究竟做错了什么?
注意:我看过一个相关的问题(使用 Lark 的语法优先级),但我看不到如何将其答案应用于我的问题。我不认为我可以完全消除我的语法歧义(真实数据中有太多可能的情况),而且我不明白该ambiguity="explicit"
选项应该做什么。
编辑:颠倒优先级
我尝试颠倒优先级,如下所示:
但是,输出完全相同。就像这些优先级被忽略,或者实际上没有歧义,因为我的locus_info
规则没有正确指定。
python - 了解什么是云雀语法中的歧义
我试图简化另一个问题中提出的案例,并使用lark进行了以下解析尝试:
输出:
如本例所示,该ambiguity="explicit"
选项应该能够显示替代匹配的可能性,前面有一个_ambig
标签。这没有出现在上面的输出中。似乎我不明白模棱两可是什么。
为什么“链加”不被认为是模棱两可的?在我看来,它可以与STRAND_INFO
或匹配onlytags
。
同样,我希望 "loc int {...}" 与locus_info
or匹配subnodes
。