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

python - How to parse ~{expr} inside string with lark ebnf

I am trying to write a lark grammar for a dsl, but having trouble with this string interpolation syntax:

so a ~{ switches from string to expression, and a } terminates that expression. I think this is close:

But the regex will only match even numbers of characters, and if the ~{ straddles an even boundary, it will be missed.

This is about as far as I could get, but still seems wrong. Can I use lookaheads? I also want to keep %ignore WS on, as it keeps the noise down massively, so a solution accounting for that would be great!

Thanks

Test cases:

0 投票
1 回答
1086 浏览

python-3.x - 如何获得程序的控制流程图?

我想获得代码/程序的控制流图(无论是任何编程语言并给出其语法)。我曾尝试在 python 中使用lark 库来解析一个基本的 C 示例程序 [我为 lark 提供了基本 c 语法的语法]。结果,它给了我一个解析树或类似东西的对象,现在我想知道从哪里开始。

话虽如此,任何一种新方法都受到高度赞赏。主要目标是在给定编写语言的语法的情况下获得代码/程序的控制流图。

0 投票
1 回答
1118 浏览

python - 基于树位置的 Lark 解析

我正在尝试编写 Lark 语法和解析器以在 numpy 之上编写 DSL。然而,Transformer 需要输出 Python 代码,而不是评估该代码。因此,例如,我想要:

这将产生一个字符串

哪里mat1mat2是已知的numpy矩阵。我正在尝试:

这给了

这给了

这非常接近!

提前感谢您的任何指导。

0 投票
1 回答
398 浏览

python - Python - Lark - 语法 - 无法生成 AST

我目前正在尝试从函数表达式生成抽象语法树,例如:

基本上是运算符(AND | OR)及其函数(可以嵌套)的简单串联。

我想将此字符串传输到抽象语法树,例如:

到目前为止我做了什么...

从云雀进口云雀

有人可以帮我解决这个问题吗?

只需要一些起点,因为文档只处理 json ...

谢谢和问候!

0 投票
2 回答
913 浏览

python - RecursionError:在python中使用lark时超出了最大递归深度

我已经编写了 cs143 course 中指定的 decaf语法​​。

这是我的代码。

它抛出

RecursionError:超出最大递归深度。

我是第一次使用 Lark

0 投票
1 回答
307 浏览

python - 如何使用 Lark 解析无效的 JSON?

让我们首先考虑一个使用 Lark 的简单 json 解析器:

以上示例取自官方示例网站,它能够解析有效的 json。

到目前为止一切都很好,但我的问题是如何扩展这个语法和转换器,以便它也能够解析无效的 json 字符串,如下面的:

我的主要目标是能够解析 SublimeText 资产(它是 json 的超集),STsublime_api.decode_value在幕后使用......但是这个函数是封闭源代码,所以我不能使用它。此外,我没有找到任何开箱即用的 pypi 库来处理这种类型的数据,所以我决定我最好的机会是尝试编写我自己的自定义“无效 json”解析器。

0 投票
2 回答
1151 浏览

python - lark-parser 缩进 DSL 和多行文档字符串

我正在尝试使用lark实现记录定义 DSL 。它基于缩进,这使事情变得更加复杂。

Lark 是一个很棒的工具,但我面临一些困难。

这是我正在实现的 DSL 的一个片段:

这是使用的语法:

它适用于记录定义的多行字符串文档,适用于内联属性定义,但不适用于属性多行字符串文档。

我用来执行的代码是这样的:

结果是:

我不明白缩进语法更复杂,而 Lark 似乎使它更容易,但在这里找不到错误。

PS:我也尝试了 pyparsing,但在同样的情况下没有成功,考虑到可能需要的代码量,我很难转向 PLY。

0 投票
0 回答
349 浏览

c# - 如何用 antlr g4 C# 语法喂百灵?

我想使用 lark 为 C# 6 生成解析器。

我找到了一个C# 6 antlr 语法,但它不适用于开箱即用的云雀。

有没有人可以告诉我如何将 g4 语法重新格式化为我可以喂百灵的东西?

看来 lark 和 g4 的格式有点不一样。

grammar.bnf包含我上面提到的 C# 6 语法,起点是compilation_unit.

摘自原始 bnf 文件:

请注意,我删除了入口点之前的所有内容compilation_unit

0 投票
0 回答
425 浏览

parsing - 云雀中earley和lalr解析器的区别?

我有一个简单的语法,它逐节解析键值对。

我的语法是:

但是,语法在使用earley 解析器时有效,但在使用lalr 解析器时无效。

使用以下代码:

厄利解析器给了我有效的结果。

但是 lalr 解析器没有

PS:问题出在_NEWLINE。

Lark-parser 语法在语法文件中配置词法分析器和解析器。在我上面的语法中,一行将被标记为 _NEWLINE。多个新行将被标记为 _NEWLINE.. _NEWLINE。它使解析器感到困惑。

更改_sep/\r?\n[\t ]*(\r?\n[\t ]*)/. 多行将被标记为一个标记。lalr(1) 解析器可以顺利地处理它。

当我让它工作时。仍然好奇早期的解析器是如何做到正确的。

0 投票
2 回答
521 浏览

python - BASIC语法中“END”和“END IF”之间的冲突,使用Lark

我正在尝试使用Lark为 BASIC 创建一个 LALR 解析器,但我很难修复“END”语句与“END IF”等语句之间的冲突。这是语法的简化版本:

如果我用这样的代码尝试这个语法:

这是我从 Lark 得到的:

如果我删除“end_stmt”规则,这将不会发生。有没有办法修复语法,以免发生这种情况?