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

python - Python - Lark - 语法 - 字符串

我正在尝试解析我正在编写的一些伪代码,并且在查找实际作为字符串提供的表达式格式时遇到了一些麻烦。

我成功地让它与正则表达式和标记器方法一起工作,但字符串将来会更多,我不想通过正则表达式传递所有内容或向标记器添加更多代码,而是我想使用lark. 我是百灵鸟的初学者,所以很难解析以下字符串。

尝试2:

尝试3:

尝试 3 - 问题:

  • 如果属性 == 年龄 | 我不能对字段和值进行 OR 日期将其余值视为 VALUE

  • 如果我们找到我希望字符串当前在树输出中的属性,它是 [] Tree(start, [Tree(filters_function, [Token(FUNCNAME, 'filter'), Tree(property_insensitive, []), Token(FIELD, 'Surname'), Token(VALUE, 'Name')])])

  • 正如你所看到的,我现在忽略了几个对我的方程有意义的实际值,我需要找到一种方法来在树值中得到它。

尝试4:

输出:

问题:

  • 我找不到返回树值的方法Tree(date_filter, [])

如果有人指出我在百灵鸟中为初学者提供了一个很好的教程,那就太好了。

0 投票
1 回答
736 浏览

python - 如何防止 Lark 将标识符的部分识别为关键字?

我一直在尝试百灵鸟,但遇到了一个小问题。假设我有以下语法。

假设我要解析1orfoo

我希望 lark 将其视为数字1后跟标识符orfoo(因此抛出错误,因为语法不接受这种表达式)。

但是,解析器运行没有错误并输出:

如您所见,Lark 将标识符拆分,并将表达式视为or语句。

为什么会这样?我错过了什么吗?我怎样才能防止这种行为?

先感谢您。

0 投票
1 回答
263 浏览

python - 解决 Lark 中字符串和数字的歧义

我正在为类似 YAML 的序列化格式编写语法。我正在使用 LALR 解析器。我在解析标量时遇到了障碍。标量可以是字符串或数字(让我们保持简单,使其仅是小数或浮点数)。这是我到目前为止所拥有的,我只保留了这里相关的内容:

字符串是一个或多个单词。一个 WORD 可以包含任何字符,除了我放在 WORD 正则表达式的否定集中的字符。我希望我的字符串能够包含数字并且仍然被解析为字符串,这就是为什么我的 WORD 否定集中没有数字。问题在于字符串以数字开头时:

当解析器在开头看到 28 时,它无法决定是解析数字还是解析单词。

这是我得到的:

预期的:

我该如何解决这种歧义?有没有办法只使用语法来做到这一点?请注意,我不希望我的字符串被引号或其他符号包围以便能够识别它们。

编辑

我已经在我的号码规则上使用更高的优先级解决了这个问题,如下所示:

这样,数字将被解析为数字而不是 WORD。以数字开头的字符串后面必须有 WORD。所以在这个修改后的版本中没有字符串只是一个数字。

0 投票
1 回答
293 浏览

python - 使用 lark 和 LALR 解析尾随行注释

给出以下云雀语法和 Python 源代码:

上面的解析器产生这棵树: 实际的树

第一行文本被正确解析,第二行(即注释)被忽略。但是,最后一行包含应该被忽略的注释。

这是预期的输出: 预期树

我意识到在我的语法中在一个TEXT节点中有两个连续的斜杠是完全合法的(实际上应该引入一行注释)。但是,我不知道如何防止这种情况。有什么办法可以禁止两个连续的斜杠TEXT或给COMMENT终端更高的优先级?

0 投票
2 回答
232 浏览

python - python - 如何在python的lark-parser中解析带有unicode字符的字符串

我正在尝试在 Python 中使用 lark 解析器来解析一些 sql 字符串。一些语句中包含 unicode 字符,导致解析器抛出错误(带有 ó,é 的字符串)。我正在使用以下几行在我的 .lark 文件中定义字符串

抛出错误

我是否在 .lark 文件中错误地指定了 unicode 字母?这样做的正确方法是什么?

0 投票
1 回答
660 浏览

python - Lark 转换器在解析多个语句时返回 Tree

我正在使用 Lark 制作一种编程语言,并且我正在尝试从一个文件中解析多个语句。当我解析

它返回

但是当我解析

它返回

这是我的语法有点像

这就是我的转换器文件的工作原理

这就是我的压头代码的工作原理

这是我的main.py文件

帮助将不胜感激,谢谢!

0 投票
1 回答
296 浏览

python - Lark 解析器以错误的顺序解析输入

所以我正在使用 lark 在 python 中制作一种编程语言,当我解析输入时,例如

input它在语句之前解析print语句。下面是我的代码的样子。

这有点像我的代码的要点,我不知道为什么我的解析器没有按顺序解析。帮助将不胜感激,谢谢!

0 投票
0 回答
324 浏览

python - Lark 解析器 Indenter 类在使用 lark.visitors.Interpreter 类时不起作用

所以我正在使用larkpython中的库制作一种编程语言,到目前为止,我一直在使用类Transformer(),但现在我已经切换到lark.visitors.Interpreter()类。我一直在将我的进度从 复制TransformerInterpreter,但我似乎无法让Indenter课堂正常工作。例如,如果我解析

当我解析这个时,我收到以下错误:

我的代码看起来有点像这样:

帮助将不胜感激,谢谢!

0 投票
1 回答
288 浏览

python - 在 if/else 语句之后评估 print 语句时,Lark Parser 引发错误

所以我正在使用python和lark用于解析的库制作一种编程语言。当我解析以下内容时

它引发以下错误

我不知道为什么会这样,这有点像我的代码:

0 投票
1 回答
84 浏览

python - 我应该如何定义一个在 LARK 中同时支持 NOT 和 AND NOT 的 NOT 运算符

这是我当前代码的样子,它只支持a AND NOT b. 有没有办法让它也返回同一棵树a NOT b?任何建议将不胜感激。

输出