问题标签 [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 回答
114 浏览

python - 为什么 python 的 open() 函数会破坏我的 utf-8 文件?

这是一个奇怪的问题,可能是由于 python 更新,因为它昨天运行良好,没有任何变化。开始了:

我有一个程序可以打开 utf-8 文件(使用重音字符等,而不仅仅是 ansi 字符)。当我用 . 打开文件时open(file, encoding="utf-8-sig").read(),非 ansi 字符会被破坏,如下所示在我的终端中:

当编码open()设置为"utf-8-sig"

但是,当我将编码设置为 时"ansi",字符完全正常!

普通字符encoding="ansi"

这对我来说完全是个谜。如前所述,昨天工作正常。我已经多次检查文件确实是 utf-8。我不知道问题出在 open() 函数,还是显示字符时的 print() 函数。无论如何,这很奇怪。该"ansi"版本将是一个解决方案,但问题是它会导致Lark出现问题,它使用打开文件的内容。

在我在这里给出的截图中,代码是基本的:

这个问题可能是由什么引起的?

0 投票
0 回答
68 浏览

regex - 在 C 的语法中定义右括号时出错

我正在尝试为我在 Lark 中使用的 C 定义一个简单的语法。问题是,我将右括号(“}”或“)”)定义为语法中的终端,但它抛出错误,因为“在当前解析器上下文中没有终端匹配')'”。在我看到的许多示例语法规则中,右括号被定义为终结符。我该如何解决这个问题?这是代码:

这是错误:

在此处输入图像描述

0 投票
1 回答
35 浏览

python - 匹配任意玩家名称

我正在使用云雀,但不知道如何匹配所有玩家的名字,因为他们可能对云雀规则很复杂?

示例模式是"Seat {number}: {player} ({chips} in chips)",我也想要每一行的所有值。

0 投票
1 回答
32 浏览

lark-parser - 用 Lark 语法识别多行部分

我正在尝试编写一个简单的语法来解析具有多行部分的文本。我无法理解如何去做。这是我到目前为止写的语法 - 在这里将不胜感激。

ps:我意识到云雀对于这个问题来说太过分了,但这只是我试图解析的一个非常简化的版本。

0 投票
1 回答
29 浏览

lark-parser - 对云雀语法中标记优先级的混淆

较早的问题之后,我对/.+/正则表达式行的优先级有点困惑;我希望下面的测试能够产生

相反,我得到:

0 投票
1 回答
22 浏览

python - 解析没有结束标记的元素/字段,非贪婪正则表达式的问题,自定义词法分析器的使用

我希望能够解析 Textile 标记语言(https://textile-lang.com/)中的文件,以便将其转换为 LaTeX。我拥有的文件有点像 Textile 的扩展,因为它添加了字段和脚注。下面给出了一个示例文件。

test.textile

要解析文件,我有以下解析器。

解析器.py

以及以下语法。这个语法还没有解析项目符号和脚注,因为我已经遇到了另一个问题。

文法云雀

当我运行解析器时,我得到以下输出。

输出

文件的其余部分被解析为段落,这是正确的,因为/.+/s可以匹配任何内容。因此,我将 STR 的定义更改/.+?/s为非贪婪,但现在输出如下(打印得很漂亮):

输出

它将每个字符解析为一个段落。它仍然将整个文件解析为段落元素。

我对这个问题的第一个解决方案是创建一个词法分析器,它为 FIELD_START、FIELD_END、PARAGRAPH_START、CODE_BLOCK_START 和脚注相关的标记创建标记。

我的词法分析器如下所示:

它根据给定的标记创建一个正则表达式,然后通过正则表达式拆分整个字符串并将所有内容作为标记返回,无论是定义的标记还是“STR”。新语法如下所示:

解析器的输出如下:

这会正确解析不同的字段和脚注,但是,代码块会被检测到的 FOOTNOTE_ANCHOR 中断。因为 Lexer 不知道上下文,它也会尝试解析代码中的脚注锚点。尝试解析项目符号时会出现同样的问题。

问题的最佳解决方案是什么?我真的需要词法分析器吗?我的词法分析器是否正确实施?(我可以找到很少的关于如何使用自定义词法分析器的例子)。我可以只对一些标记进行 lex 并将其余的留给“父”词法分析器吗?

0 投票
1 回答
54 浏览

python - 如何将 EOL(换行符)与 Lark 匹配?

我正在将云雀解析器与 python 一起使用。我想使用 EOL 作为语法的一部分,因为它是面向行的。当我尝试将正则表达式放入匹配 EOL 时出现错误。我看到一些这样的例子:

但他们不适合我。这是我的代码:

这是我得到的错误:

0 投票
0 回答
13 浏览

lark-parser - Lark 简单sql语法

我试图通过这个语法解析一个简单的 sql:

但是,当我用文本调用解析器时, """select cola, colb from foo left outer join bar b on x = 1 join jar j on jb > xw where cola <> colb and colx > coly""",它解析第二个join作为 a term,即作为第一个join条件的一部分。关于如何正确执行此操作的任何想法?

0 投票
1 回答
14 浏览

python - 用于生成序列的 DSL

试图创建 DSL 来生成序列......这是我到目前为止所做的:

这是 DSL 的样子:

我在 expr ... 中遇到 expr 问题?

这失败了: