问题标签 [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 投票
2 回答
675 浏览

parsing - LALR(1) 函数的空参数列表

我有一个简单的 LALR(1) 语法,但我遇到了问题。

点标记规则的结束,括号之间的终端具有关联性:ASSIGN 是右关联的,COMMA 是左关联的。

但是柠檬说它不能减少规则“empty_stmt_list ::=”。因为它没有连接到开始符号。我敢打赌 :-)

“invoke”也存在解析冲突,当empty_stmt_list确实是一个empy语句列表时,它无法在RPAREN和COMMA之间做出决定。

我想要实现的是能够解析没有(void)参数的函数调用。

其他一切都按预期工作。

谢谢

编辑:我已经编辑了我的原始帖子并发布了整个精简的语法。

0 投票
1 回答
405 浏览

parsing - 逗号分隔的函数调用参数的解析器表达式

我正在编写一个解析器,它可以解析像myfunc1(),myfunc2(param1)myfunc3(param1, param2)(带有未知数量的参数)这样的表达式。现在我正试图让我的解析表达式正确。我正在使用Lemon Parser Generator。这是我想出的:

暂时不要介意花括号的内容。该params定义允许空参数(彼此之后的几个分隔符),目前可以。但是我将如何更改定义以强制非空参数但仍然让所有参数由SEPARATOR令牌分隔?

0 投票
2 回答
1218 浏览

c - 在解析中恢复错误标记(柠檬)

我使用 Lemon 作为解析器生成器,如果您不了解 Lemon,它的错误处理与 yacc 和 bison 相同。

Lemon 可以选择在一组规则中定义错误标记,以捕获解析错误。生成的解析器的默认行为是销毁导致错误的令牌;有没有办法覆盖这种行为,以便我可以保留令牌?

这是一个显示正在发生的事情的示例:基本上我将每个规则的标记附加在一起以修改输入字符串,这是一个示例语法:

输入时:

我得到输出:

因为文本“用户名”被解析器在 part(A) ::= error(B) 规则中丢弃,但我真的想要:

作为输出。

如果您可以在野牛或其他解析器生成器中解决此问题,我会接受它作为答案:)

0 投票
1 回答
623 浏览

php - Lemon Parser-Generator:不评估非终结符吗?

我尝试学习解析器。因为我的 C 技能相当低,我用谷歌搜索了一个PHP Lemon来学习解析器生成器。无论如何,这里的代码对于普通的柠檬朋友也应该是可读的。

与处理解析问题时一样,我首先尝试制作一个简单的计算器。

所以我的第一步很简单:

解析第一个测试的内容:

...结果:

所以,一切如预期。现在我们尝试准备一个最终允许我们处理操作的步骤,即expression

当我现在运行相同的测试时,我希望看到相同的输出,加上一行说got a value: 13. 但我只是得到这个:

嗯,发生了什么事?为什么结果行是空的?显然expr评估为VALUE“13”。柠檬不关心评价吗?我必须以某种方式自己做吗?但是,如果我在这一点上一无所获呢?

0 投票
2 回答
373 浏览

c++ - 如何从 Lemon 语法中删除函数调用歧义?

我有以下柠檬语法(从真正的语法简化):

在以下状态下,我无法修复 shift-reduce 冲突:

我的想法是问题在于 a=(b(c)) 和 (a=b)(c) 之间的歧义,但我原以为赋予函数调用比赋值更高的优先级可以解决它。任何想法可能是什么情况?

0 投票
2 回答
3365 浏览

c - 柠檬的力量与否?

对于语法解析器,我曾经与Bison “玩”,它有其优点/缺点。

上周,我在SqlLite网站上注意到该引擎是由另一个语法解析器完成的: Lemon

阅读精简文档后听起来很棒。
你对这个解析器有什么反馈吗?

在 Google 和 Wikipedia 上无法真正看到相关信息(只是几个示例,相同的教程) 它似乎不太受欢迎。(堆栈溢出中没有标签[编辑:现在有:P])

0 投票
2 回答
1235 浏览

parsing - 修复 Lemon 解析冲突

我正在编写一个使用 Flex 和 Lemon 解析约束的小型解析器。Lemon 报告了一些我无法摆脱的解析冲突。是否有任何特殊技巧可以消除上下文无关语法中的解析冲突?

语法如下。

错误如下。

整个解析器生成器报告在这里。http://pastebin.com/TRsV3WvK

有人知道我在这里做错了什么吗?我可以忽略这些冲突吗?

0 投票
1 回答
850 浏览

parsing - 柠檬解析器是 LALR(1) 还是 SLR(1)?

我正在阅读柠檬解析器的 PHP 移植:

在我看来,解析器是一个 SLR(1) 解析器,根据它如何计算动作表,但是@the home page of lemon,它证明自己是一个 LALR(1) 解析器:

是 SLR(1) 还是 LALR(1) ?

0 投票
1 回答
799 浏览

context-free-grammar - 为什么我的小语法中有 3 个解析冲突?

有谁知道冲突在哪里?

更新

如果我删除exp(res) ::= exp(e1) OP(o) exp(e2).,只会有两个冲突,但我不知道为什么会导致冲突......

更新2

为什么这里可以:

0 投票
1 回答
4267 浏览

c - 野牛传回产生的 AST

柠檬中,当起始符号减少时,我能够使用解析函数的第三个参数将结果传回给调用者。

我将如何在野牛中做同样的事情?是否足以在起始符号的操作代码中将该值分配给 $$,并在最终调用之后从调用者将其作为“yy 次要”值yypush_parse()

解析器是推送和纯粹的。线程安全是必须的。