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

c++ - 调试解析器生成的代码

我已经使用 Lemon Parser 生成了一个解析器代码。我无法调试生成的代码。控件显示当前执行语句之外的一些其他源代码。断点被置换。我试过 gdb 和 Visual C++。两者都有同样的问题。请告诉我调试它的方法。

0 投票
2 回答
1140 浏览

parsing - Lemon LALR 解析器的简单语法

一段时间以来,我一直坚持这一点。我想解析一些简单的东西:

喜欢:word1 word2 .. wordN 讨厌:word1 word2 .. wordN

我正在使用柠檬+Flex。目前我的语法看起来像这样:

但这仅适用于前 2 个单词。显然我做错了什么,可能在递归定义中?任何提醒表示赞赏:)

0 投票
1 回答
901 浏览

css - 使用 Lemon Parser Generator 的歧义语法

所以基本上我想使用 PEAR 包 PHP_LexerGenerator 和 PHP_ParserGenerator 生成的词法分析器/解析器来解析 PHP 中的结构 CSS 代码。我的目标是解析这样的文件:

只要我没有伪类,这一切都很好。伪类允许它向元素添加:CSS 名称 ( [a-z][a-z0-9]*),例如 in a.menu:visited。有点懒惰,解析器没有有效的伪类列表,并接受类名的所有内容。

我的语法(忽略所有特殊情况和空格)如下所示:

现在,当我尝试解析以下内容时

解析器抱怨说,它期望 a<name>跟在双冒号后面。所以它尝试将其读取simple:为 a <selector>(只需查看 SO 的语法突出显示)。

解析器无法回溯到足以尝试<definition>规则是我的错误吗?还是柠檬不足以表达这一点?如果是这样,我该怎么做才能让解析器使用这个语法?

0 投票
1 回答
241 浏览

php - 柠檬语法的问题(优先级?)

我为支持函数调用而创建的简单语法遇到了麻烦。
我正在使用 Greg 的基于柠檬的 PHP_ParserGenerator。

这是语法的相关部分:

当我使用上下文初始化解析器array('user' => array('name' => 'Dennis')); 并执行以下代码时:

$result如下:“丹尼斯” 。生活很好。

但是当我提供一个 CONTEXT_REFERENCE 作为函数调用的参数时,它不起作用:

$result是'us3r.nam3'。不太像预期的那样。作为记录,预期的输出当然是“D3nnis”。(user.name首先被字符串 'Dennis' 替换,然后传递给str_replace()函数)。

我怀疑这与优先级有关。但我不知道我应该改变什么来做到这一点。非常稀疏的 Lemon 文档并没有太大的帮助。

任何帮助将不胜感激!谢谢

0 投票
2 回答
466 浏览

parsing - 在柠檬解析器中使用变量?

我想在我的 Lemon 解析器驱动的应用程序中允许数学变量。例如,如果用户输入 x^2+y,我希望能够针对 100000 对不同的 x 和 y 值进行评估,希望不必每次都重新解析。我能想到的唯一方法是让解析器生成一个对象树,然后在给定输入时评估表达式。有更好/更简单/更快的方法吗?

性能可能是这里的一个问题。但我也关心编码和代码维护的便利性。

0 投票
0 回答
889 浏览

php - 柠檬的“hello world”解析器

我花了几个小时尽力为解析简单的“hello + world”的柠檬解析器(分别是 PEAR 的 PHP_LexerGenerator)创建一个 y 文件。

我使用了这个(德语)教程,是的,有一个计算器教程很好,但最后,我想解析一些更复杂的东西(使用“变量”)。

这种“语言”解析/标记“hello + world”的定义是什么?

这是我尝试过的许多其他事情之一:

除了 IDENT,我还尝试了 VALUE、string、... 甚至SQLite/parser.y 文件都没有帮助我。

谢谢你的帮助。

0 投票
1 回答
203 浏览

parsing - 移位/减少与表达式调用的冲突

当我尝试使用 Lemon 编译这个简单的解析器时,我遇到了冲突,但我看不出哪个规则是错误的。如果我删除二进制表达式或调用表达式,冲突就会消失。

[编辑]向 LParenthesis 添加左侧关联性解决了冲突。但是,我很想知道这样做是否正确:我已经看到一些语法(fe C++)对于构造运算符'()'和调用运算符'()'具有不同的优先级。所以我不确定做正确的事。

0 投票
2 回答
1158 浏览

parsing - 使用柠檬解析器生成器的“预期令牌”

发生语法错误时,是否有一种已知的方法可以生成“预期令牌”列表?我使用 Lemon 作为解析器生成器。

0 投票
1 回答
442 浏览

grammar - 为什么会出现这种语法冲突?

它是用 Lemon 编译的,它是一个 LALR(1) 解析器生成器:

错误信息是:

调试输出是:

0 投票
1 回答
1511 浏览

javascript - 为 SQLite3 生成 JavaScript SQL 解析器(使用 Lemon?ANTLR3?)

在过去的几周里,我一直潜入将 SQL 语句解析为可管理的东西的美丽世界,只是发现我可能需要一个完整的词法分析器/解析器来正确处理所有允许的标记/格式来执行一样。

我最感兴趣的是 create table 语句,但一个完整的通用解析器会更好,因为网络上似乎还没有人拥有这个。

我不是计算机专业的毕业生,而是一个自学成才的人,所以这对我来说是一个相当大的学习曲线。我采取的步骤是:

  1. 使用正则表达式解析 sql
  2. 失败,修复正则表达式
  3. 更糟糕的是,挖掘 SQLite 源代码,发现它使用了 Lemon 解析器,这是一个特定于 SQLite 的项目
  4. 尝试让 Lemon + PHP 解析器工作,认为我可以手动将其转换为 js。(失败的)
  5. 尝试让 Emscripten 在 C 中处理 Lemon 生成的解析器(依赖地狱,失败。)
  6. 搜索其他解析器/词法分析器生成器,注意 ANTLR3
  7. 日夜尝试通过更改输出格式和回溯错误将Sqljet语言文件转换为javascript。

我一直在使用出色的AntlrWorks GUI 来尝试找出问题所在,但我不确定是 Javascript 堆栈出了问题,还是 Java 堆栈,或者 .g 格式是 v2 的旧格式。

是否有任何具有解析器/词法分析器生成器经验的人可以指出正确的方向来生成正确的可重用 Sqlite 解析器?我似乎能够在 javascript 中为 mysql 和 pl/sql 生成解析器。这是否意味着 sqlite .g 格式需要更新?