问题标签 [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 的 open() 函数会破坏我的 utf-8 文件?
这是一个奇怪的问题,可能是由于 python 更新,因为它昨天运行良好,没有任何变化。开始了:
我有一个程序可以打开 utf-8 文件(使用重音字符等,而不仅仅是 ansi 字符)。当我用 . 打开文件时open(file, encoding="utf-8-sig").read()
,非 ansi 字符会被破坏,如下所示在我的终端中:
但是,当我将编码设置为 时"ansi"
,字符完全正常!
这对我来说完全是个谜。如前所述,昨天工作正常。我已经多次检查文件确实是 utf-8。我不知道问题出在 open() 函数,还是显示字符时的 print() 函数。无论如何,这很奇怪。该"ansi"
版本将是一个解决方案,但问题是它会导致Lark出现问题,它使用打开文件的内容。
在我在这里给出的截图中,代码是基本的:
这个问题可能是由什么引起的?
python - 匹配任意玩家名称
我正在使用云雀,但不知道如何匹配所有玩家的名字,因为他们可能对云雀规则很复杂?
示例模式是"Seat {number}: {player} ({chips} in chips)"
,我也想要每一行的所有值。
lark-parser - 用 Lark 语法识别多行部分
我正在尝试编写一个简单的语法来解析具有多行部分的文本。我无法理解如何去做。这是我到目前为止写的语法 - 在这里将不胜感激。
ps:我意识到云雀对于这个问题来说太过分了,但这只是我试图解析的一个非常简化的版本。
lark-parser - 对云雀语法中标记优先级的混淆
继较早的问题之后,我对/.+/
正则表达式行的优先级有点困惑;我希望下面的测试能够产生
相反,我得到:
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 并将其余的留给“父”词法分析器吗?
python - 如何将 EOL(换行符)与 Lark 匹配?
我正在将云雀解析器与 python 一起使用。我想使用 EOL 作为语法的一部分,因为它是面向行的。当我尝试将正则表达式放入匹配 EOL 时出现错误。我看到一些这样的例子:
但他们不适合我。这是我的代码:
这是我得到的错误:
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
条件的一部分。关于如何正确执行此操作的任何想法?
python - 用于生成序列的 DSL
试图创建 DSL 来生成序列......这是我到目前为止所做的:
这是 DSL 的样子:
我在 expr ... 中遇到 expr 问题?
这失败了: