问题标签 [lemon]

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 投票
1 回答
164 浏览

lemon - 如何让 Lemon 在 file.h 中定义终端标记,而不在任何减少规则中使用该标记?

我在 Ragel 中实现了我的词法扫描器,当我识别各种空白时,我需要一个令牌来使用。但除了分离其他标记之外,我不关心空白。如果我将它传递给我的 Lemon 解析器,我将不得不插入许多额外的规则来摆脱它,这将使我的语法变得丑陋并减慢解析速度。但是我发现让 Lemon 生成空白标记的唯一方法是放入我从未打算使用的 reduce 规则。

目前,我有一个list0 ::= .允许空列表的规则,所以我添加了一个list0 ::= SP.. 有没有更简洁的方法来声明一个令牌,而不在减少规则中使用它?

0 投票
1 回答
135 浏览

lemon - 柠檬是否正确处理非关联优先级?

我觉得柠檬解析器生成器在非关联优先级上做错了。我有一个简化的语法来展示我所看到的问题。

产生这样的冲突报告:

如果我告诉它 equals 是左关联的,那么问题就消失了。就好像 nonassoc 没有将规则放入优先级集中。与该语法的 Bison 版本相比,没有冲突。分配确实应该是非关联的。为了解决这个问题,我宁愿不撒谎。

0 投票
1 回答
1677 浏览

parsing - Bison/YACC vs. Lemon vs. 标准输入

我正在尝试将计算器从 Bison 转换为 Lemon。

我遇到了一个涉及标准输入的意外问题,其中两个程序的行为完全不同。Bison 版本在按下 [Enter] 后立即打印结果。在 Lemon 版本中,结果会延迟,直到我键入新表达式并按 [Enter]。

我创建了微型 Bison 和 Lemon 语法以及 Flex 扫描仪来说明问题。这是在 Windows 7 上,使用 2014 年 7 月版本的 Lemon、Bison 2.41 和 gcc (tdm64-2) 4.8.1。

Bison 版本的简单会话

野牛版会话

请注意在简单表达式后按 [Enter] 后如何返回结果。

Lemon 版本的简单会话

柠檬版会话

请注意,仅在输入第二个表达式并按 [Enter] 后才返回结果(ctrl Z 表示 cmd.exe 的输入结束)。

我做错了什么?

Bison/Flex 版本源码

坏的.l:

坏的.y:

构建:

Lemon/Flex 版源码

小伙子

小伙子:

主.c:

构建:

0 投票
1 回答
286 浏览

ios - 使用 Lemon(和 Core Foundation)解析 JSON

我正在尝试使用 Lemon 和 Apple Core Foundation 编写一个简单的 JSON 解析器。

这是到目前为止的代码:

使用这样的简单 JSON

我不能超越成员规则(此时,字典设置正确)。

永远不会调用对象规则,而json ::= 对象也是如此!

我在做傻事吗?

任何输入将不胜感激!

0 投票
1 回答
156 浏览

c++ - C++ 中 Lemon 生成的解析器的分段错误

我试图弄清楚 Lemon 解析器生成器,所以我写了一个小测试来帮助自己完全理解。文件生成没有问题,编译器没有抱怨,但是当我尝试运行它时,我得到一个分段错误。我究竟做错了什么?

词典.l:

语法.y:

主.cpp:

AST.h:

AST.cpp:

最后是测试输入:

和输出:

0 投票
1 回答
300 浏览

c++ - 从未在柠檬生成的解析器中声明自定义类成员导致编译错误

我正在尝试学习如何使用 Lemon 解析器生成器,并且我建立了一个学习项目。但是,当我尝试编译源代码时,我从 GCC 收到了一些奇怪的错误。看起来可能有一些文本转录问题或拼写错误,但我找不到。我正在使用 C++11 标准进行编译。文件“log”包含编译器输出。

我编译

AST.h

语法.y:

词典.l:

主文件

日志:

0 投票
1 回答
244 浏览

parsing - 使用带有自定义标记值的 Lemon 解析器

我正在将旧语法移植到柠檬中,并且我已经在头文件中定义了所有终端符号;我想将它们与这些值一起使用,而不是柠檬在 parser.h 中生成的值:这可能吗?
覆盖 parser.h 完全没用,因为这只是内部发生的事情的镜像,匹配的值将保持不变。
(由于柠檬与野牛共享很多代码,我认为野牛的解决方案也可以解决柠檬的问题)

0 投票
1 回答
108 浏览

parsing - 在 Lemon 中使用 midaction 规则来解释“let”表达式

我正在尝试使用 Flex + Lemon 编写一个“玩具”解释器,它支持非常基本的“let”语法,其中变量 X 临时绑定到表达式。例如,“letx 3 + 4 in x + 8”应计算为 15。

本质上,我“喜欢”的规则是:

但这不起作用,因为在分配O之前进行了评估。X = N

我知道通常的解决方案是中间规则行动。Lemon 没有明确支持这一点,但我在其他地方读到过无论如何都只是语法糖

因此,我尝试制定一个中期规则行动,X = N在解释之前完成我的任务O

但这不起作用,因为midruleaction规则无法访问N,或者至少我在柠檬文档/示例中看不到。

我想我在这里遗漏了一些东西。我知道我可以建造一棵树,然后再走一遍。我可能最终会这样做,但我想先了解如何更直接地解决这个问题。

有什么建议么?

0 投票
1 回答
53 浏览

parsing - 为什么柠檬不立即执行终端?

我正在使用 flex 和 yacc 将一个小型线程解释器移动到 re2c 和柠檬。一切正常,但文字。

为什么与文字相关的操作无法像使用 yacc 一样运行?我期望“1.0 end”但得到“0.0 end”

dsp语法

主程序

生成文件

0 投票
1 回答
165 浏览

c - 如何使用柠檬处理带有变量的表达式

我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(如 sql 准备语句)。

例如,表达式可能像$foo + $bar + 2,我需要在后面设置$foo和时计算结果。$bar

我正在尝试用ragellemon来实现它。我已经学会了使用ragel来解析表达式。但我不知道如何使用柠檬来处理变量并进行计算。

谢谢你的帮助。