问题标签 [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.
parsing - LALR(1) 函数的空参数列表
我有一个简单的 LALR(1) 语法,但我遇到了问题。
点标记规则的结束,括号之间的终端具有关联性:ASSIGN 是右关联的,COMMA 是左关联的。
但是柠檬说它不能减少规则“empty_stmt_list ::=”。因为它没有连接到开始符号。我敢打赌 :-)
“invoke”也存在解析冲突,当empty_stmt_list确实是一个empy语句列表时,它无法在RPAREN和COMMA之间做出决定。
我想要实现的是能够解析没有(void)参数的函数调用。
其他一切都按预期工作。
谢谢
编辑:我已经编辑了我的原始帖子并发布了整个精简的语法。
parsing - 逗号分隔的函数调用参数的解析器表达式
我正在编写一个解析器,它可以解析像myfunc1()
,myfunc2(param1)
和myfunc3(param1, param2)
(带有未知数量的参数)这样的表达式。现在我正试图让我的解析表达式正确。我正在使用Lemon Parser Generator。这是我想出的:
暂时不要介意花括号的内容。该params
定义允许空参数(彼此之后的几个分隔符),目前可以。但是我将如何更改定义以强制非空参数但仍然让所有参数由SEPARATOR
令牌分隔?
c - 在解析中恢复错误标记(柠檬)
我使用 Lemon 作为解析器生成器,如果您不了解 Lemon,它的错误处理与 yacc 和 bison 相同。
Lemon 可以选择在一组规则中定义错误标记,以捕获解析错误。生成的解析器的默认行为是销毁导致错误的令牌;有没有办法覆盖这种行为,以便我可以保留令牌?
这是一个显示正在发生的事情的示例:基本上我将每个规则的标记附加在一起以修改输入字符串,这是一个示例语法:
输入时:
我得到输出:
因为文本“用户名”被解析器在 part(A) ::= error(B) 规则中丢弃,但我真的想要:
作为输出。
如果您可以在野牛或其他解析器生成器中解决此问题,我会接受它作为答案:)
php - Lemon Parser-Generator:不评估非终结符吗?
我尝试学习解析器。因为我的 C 技能相当低,我用谷歌搜索了一个PHP Lemon来学习解析器生成器。无论如何,这里的代码对于普通的柠檬朋友也应该是可读的。
与处理解析问题时一样,我首先尝试制作一个简单的计算器。
所以我的第一步很简单:
解析第一个测试的内容:
...结果:
所以,一切如预期。现在我们尝试准备一个最终允许我们处理操作的步骤,即expression
:
当我现在运行相同的测试时,我希望看到相同的输出,加上一行说got a value: 13
. 但我只是得到这个:
嗯,发生了什么事?为什么结果行是空的?显然expr
评估为VALUE
“13”。柠檬不关心评价吗?我必须以某种方式自己做吗?但是,如果我在这一点上一无所获呢?
c++ - 如何从 Lemon 语法中删除函数调用歧义?
我有以下柠檬语法(从真正的语法简化):
在以下状态下,我无法修复 shift-reduce 冲突:
我的想法是问题在于 a=(b(c)) 和 (a=b)(c) 之间的歧义,但我原以为赋予函数调用比赋值更高的优先级可以解决它。任何想法可能是什么情况?
parsing - 修复 Lemon 解析冲突
我正在编写一个使用 Flex 和 Lemon 解析约束的小型解析器。Lemon 报告了一些我无法摆脱的解析冲突。是否有任何特殊技巧可以消除上下文无关语法中的解析冲突?
语法如下。
错误如下。
整个解析器生成器报告在这里。http://pastebin.com/TRsV3WvK
有人知道我在这里做错了什么吗?我可以忽略这些冲突吗?
parsing - 柠檬解析器是 LALR(1) 还是 SLR(1)?
我正在阅读柠檬解析器的 PHP 移植:
在我看来,解析器是一个 SLR(1) 解析器,根据它如何计算动作表,但是@the home page of lemon,它证明自己是一个 LALR(1) 解析器:
是 SLR(1) 还是 LALR(1) ?
c - 野牛传回产生的 AST
在柠檬中,当起始符号减少时,我能够使用解析函数的第三个参数将结果传回给调用者。
我将如何在野牛中做同样的事情?是否足以在起始符号的操作代码中将该值分配给 $$,并在最终调用之后从调用者将其作为“yy 次要”值yypush_parse()
?
解析器是推送和纯粹的。线程安全是必须的。