问题标签 [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 - 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:
python-3.x - 如何获得程序的控制流程图?
我想获得代码/程序的控制流图(无论是任何编程语言并给出其语法)。我曾尝试在 python 中使用lark 库来解析一个基本的 C 示例程序 [我为 lark 提供了基本 c 语法的语法]。结果,它给了我一个解析树或类似东西的对象,现在我想知道从哪里开始。
话虽如此,任何一种新方法都受到高度赞赏。主要目标是在给定编写语言的语法的情况下获得代码/程序的控制流图。
python - 基于树位置的 Lark 解析
我正在尝试编写 Lark 语法和解析器以在 numpy 之上编写 DSL。然而,Transformer 需要输出 Python 代码,而不是评估该代码。因此,例如,我想要:
这将产生一个字符串:
哪里mat1
和mat2
是已知的numpy矩阵。我正在尝试:
这给了
这给了
这非常接近!
提前感谢您的任何指导。
python - Python - Lark - 语法 - 无法生成 AST
我目前正在尝试从函数表达式生成抽象语法树,例如:
基本上是运算符(AND | OR)及其函数(可以嵌套)的简单串联。
我想将此字符串传输到抽象语法树,例如:
到目前为止我做了什么...
从云雀进口云雀
有人可以帮我解决这个问题吗?
只需要一些起点,因为文档只处理 json ...
谢谢和问候!
python - 如何使用 Lark 解析无效的 JSON?
让我们首先考虑一个使用 Lark 的简单 json 解析器:
以上示例取自官方示例网站,它能够解析有效的 json。
到目前为止一切都很好,但我的问题是如何扩展这个语法和转换器,以便它也能够解析无效的 json 字符串,如下面的:
我的主要目标是能够解析 SublimeText 资产(它是 json 的超集),STsublime_api.decode_value
在幕后使用......但是这个函数是封闭源代码,所以我不能使用它。此外,我没有找到任何开箱即用的 pypi 库来处理这种类型的数据,所以我决定我最好的机会是尝试编写我自己的自定义“无效 json”解析器。
python - lark-parser 缩进 DSL 和多行文档字符串
我正在尝试使用lark实现记录定义 DSL 。它基于缩进,这使事情变得更加复杂。
Lark 是一个很棒的工具,但我面临一些困难。
这是我正在实现的 DSL 的一个片段:
这是使用的语法:
它适用于记录定义的多行字符串文档,适用于内联属性定义,但不适用于属性多行字符串文档。
我用来执行的代码是这样的:
结果是:
我不明白缩进语法更复杂,而 Lark 似乎使它更容易,但在这里找不到错误。
PS:我也尝试了 pyparsing,但在同样的情况下没有成功,考虑到可能需要的代码量,我很难转向 PLY。
c# - 如何用 antlr g4 C# 语法喂百灵?
我想使用 lark 为 C# 6 生成解析器。
我找到了一个C# 6 antlr 语法,但它不适用于开箱即用的云雀。
有没有人可以告诉我如何将 g4 语法重新格式化为我可以喂百灵的东西?
看来 lark 和 g4 的格式有点不一样。
grammar.bnf
包含我上面提到的 C# 6 语法,起点是compilation_unit
.
摘自原始 bnf 文件:
请注意,我删除了入口点之前的所有内容compilation_unit
:
parsing - 云雀中earley和lalr解析器的区别?
我有一个简单的语法,它逐节解析键值对。
我的语法是:
但是,语法在使用earley 解析器时有效,但在使用lalr 解析器时无效。
使用以下代码:
厄利解析器给了我有效的结果。
但是 lalr 解析器没有
PS:问题出在_NEWLINE。
Lark-parser 语法在语法文件中配置词法分析器和解析器。在我上面的语法中,一行将被标记为 _NEWLINE。多个新行将被标记为 _NEWLINE.. _NEWLINE。它使解析器感到困惑。
更改_sep
为/\r?\n[\t ]*(\r?\n[\t ]*)/
. 多行将被标记为一个标记。lalr(1) 解析器可以顺利地处理它。
当我让它工作时。仍然好奇早期的解析器是如何做到正确的。
python - BASIC语法中“END”和“END IF”之间的冲突,使用Lark
我正在尝试使用Lark为 BASIC 创建一个 LALR 解析器,但我很难修复“END”语句与“END IF”等语句之间的冲突。这是语法的简化版本:
如果我用这样的代码尝试这个语法:
这是我从 Lark 得到的:
如果我删除“end_stmt”规则,这将不会发生。有没有办法修复语法,以免发生这种情况?