问题标签 [leex]
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.
compiler-construction - 如何为 Erlang VM 编译
我正在尝试为应用程序中的用户脚本实现一种小型描述语言。基本上,用户描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用 JSON(但它会更冗长)。
我使用 leex 和 yecc,我有一个不错的解析树。说它是这样的:
有了这棵树,我想构建这样的东西:
但我不知道从哪里开始。我可以在运行时读取树并构建乐趣,但我真的想学习如何编译(并希望有更好的性能)。
我应该将我的解析树转换为 Erlang AST,然后编译 erlang 模块吗?
谢谢。
regex - 如何匹配leex中的行首?
根据leex 文档
^ 匹配字符串的开头。
但是当我尝试以某种模式使用它时,^[^\s\t-:]+[^:].*$
我得到了这个错误:bad regexp 'illegal character ^'
有没有更好的方法来匹配一行的乞求?leex 中的字符串?
erlang - 无法让 Yecc 和 Leex 工作
我正在尝试创建一个非常简单的 DSL,它采用格式如下的字符串
把它变成类似的东西
我的 Leex 文件是这样的:
我的 Yecc 文件如下所示:
我得到的输出:
erlang - leex 是编写模板引擎词法分析器的好选择吗?
我正处于为 Elixir 实现类似 jinja2 的模板语言的初始设计阶段。我一直倾向于手动编写词法分析器,但最近我遇到了 Erlang 的 leex 模块。它看起来很有希望,但经过一些初步研究后,我不确定它是否适合我的目的。
我的一个犹豫是模板语言本质上是一种字符串嵌入语言,目前尚不清楚如何使用 leex 在这种情况下使用标记化。作为一个简单的例子,想象一下标记这个模板:
在此示例中,我需要确保关键字 ' for ' 和 ' in ' 的标记不同,具体取决于:
- 如果它们在标签内:{% %}
- 如果它们在标签内:{{}}
- 如果它们在模板中,但不在任何标签内。
对我来说,这看起来我需要在标记化阶段进行两次传递,或者滚动我自己的词法分析器以便一次完成。
我想知道是否有任何有词法分析经验的人,尤其是 leex,或编写模板引擎可以提供一些关于最佳前进方式的见解?
erlang - 在 Elixir/Erlang 中使用 Yecc 解析器将项目附加到映射
我正在尝试在 Elixir 中使用 Leex/Yecc 解析特定的日志文件。几个小时后,我得到了最简单的工作方案。但是我想进行下一步,但我不知道该怎么做。
首先,这里是一个日志格式的例子:
我的简单尝试仅使用第一行,但它们的多个条目,例如:
这很有效,并给了我一张包含文本和日志行类型(警告)的漂亮地图:
那是完美的。但如上所示,日志行可以在下一行继续,用竖线字符表示|
。我的词法分析器有管道字符,解析器可以理解它,但我想要的是下一行附加到text
我的地图值。现在它只是作为字符串附加到地图中。所以而不是:
我需要:
我查看了网上的示例,但其中大多数都有非常明确的“结束”标记,例如结束标记或结束括号,然后我仍然不清楚如何添加属性,因此最终的 AST 是正确的.
为了完整起见,这是我的词法分析器:
还有我的解析器:
如果你能走到这一步,已经谢谢你了!如果有人能帮忙,那就更感谢了!
erlang - 在 leex 语法文件定义中,是否有一个正则表达式规则可以精确匹配 N 个元素?
查看 leex的文档,我没有看到完全匹配 N 个元素的示例,例如(element){n}
?
这失败了:
解决方法是这样的:
因此,如果我想匹配 3,000 个 foo,则定义ThreeThousandFoos = foofoofoo<2,997 more foos>
将变得非常笨拙。有一些技巧,例如从较小的定义(例如SixteenFoos = {EightFoos}{EightFoos}
)构建越来越大的 foo 定义,但这似乎很愚蠢。
regex - 使用 flex、lex、leex 匹配严格的整个单词
我刚刚开始使用 leex 和 yecc 来为一个非常简单的控制外壳做词法分析器/解析器的东西。
我的词法分析器定义:
真的没什么。简单的情况下工作正常:
但这些一直困扰着我:
相反,我想要类似的东西:
但我不知道如何使用这些工具在单词边界进行匹配(它使用了一个苗条的impl。对于正则表达式 btw)
Ps:以防万一,我知道这不是正确的方法,但只是想知道是否可能以及如何
编辑 删除 lex 和 flex 标记,因为这似乎是 leex 的限制,而不是这些 *tools
elixir - 我可以让 Elixir 执行与变量匹配的引用代码吗?
也许这不是要走的路,但这是我最初的猜测,我愿意接受提示和更正。
我一直在为我部分继承和扩展的简化查询方言编写解析器,允许用户编写如下内容:
plant where accession.code='2018.0047'
它还没有准备好,但是缺少的中间步骤很清楚,除了最后一个:我如何执行结果?
我的目标是等效Ecto.Query.from
查询的报价表示。对于上面的例子,就我而言,等效的是:
我一直在研究__schema__
函数返回的结构,一切看起来都很可行,我的意思是我知道如何从模块中提取表名,以及从给定名称的关联中提取所有者和相关模块和键,所以让我们假设我的解析器确实返回了这个值:
如何让 Ecto 执行它?
或者从 yecc 解析器生成 Elixir 代码的最佳方法是什么?