问题标签 [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 回答
481 浏览

parsing - 从 Lemon Parser Generator 生成 LR 解析表

我正在尝试使用柠檬解析器生成器生成解析器表,但是.out我运行时生成的文件lemon grammar.y只包含自动机的状态。

有没有办法获得非终端的 goto 表,而不仅仅是自动机的状态?或者这只能通过阅读生成的代码来完成?是否有任何其他工具可以同时生成操作表和 goto 表?

PS:

一个简单语法的.out文件(由柠檬生成)如下所示:

0 投票
1 回答
808 浏览

c - 使用柠檬解析器(LALR)生成计算器,如何从表达式中获取参数

我想从输入中获取参数。例如:Input:12+10。运行我的计算器后。

我想得到 12 和 10。我知道,我必须使用 中的第四个参数Parse(pParser, hTokenID, sTokenData, pArg);,但是如何?

解析器.y

计算.c

0 投票
1 回答
1398 浏览

lemon - 有没有关于 re2c + 柠檬的好的工作教程?

我试过一对。Google 中只有几个关于 re2c+lemon 的教程。
目前对于所有示例,我都会遇到类似的错误,例如:

它在哪里声明?

PS:不要发布 10 年前的文章(即使没有代码或者现在无法编译代码)。如果可以的话 - 在这里写一个例子。如果不是 - 不要发布来自 Google 的链接。

0 投票
1 回答
129 浏览

c - Lemon 中令牌析构函数的自定义释放函数

我希望 Lemon 解析一个简单的类 C 表达式,支持对一组具有已知名称的预定义变量进行整数和字符串比较。为简单起见,我们假设它只支持字符串比较。因此,以下字符串是我正在谈论的表达式类型的一个很好的例子:

因此,我的词法分析器必须按照以下顺序为解析器提供值:

我必须复制传递给解析器的文字字符串,因为它们可能包含我必须首先解码的转义序列。但是解析完成后谁负责释放内存呢?幸运的是,Lemon 用它的%destructor指令来救援,所以我可以写:

但事实上,我不想在我的解析器和词法分析器中硬编码malloc,strdup和的用法。free我希望能够将分配器和释放器函数作为参数传递,但不仅在parserInitand中使用它们parserFree,而且还用于令牌分配和释放。

如何声明附加参数以同时parserAlloc传递?Lemon中有指令,但它让我每次输入令牌时都传递我的参数。mallocfree%extra_argument

0 投票
1 回答
149 浏览

c++ - 柠檬 + re2c 没有得到正确的规则解析

这是我的柠檬解析器语法

我的输入字符串是

我期望输出是

但相反,我得到的输出为

我确定我以正确的顺序传递了令牌,并且我已经验证了这一点,因为解析器会在输入错误时抛出语法/解析器错误。

这是我用来将令牌传递给解析器的代码

我不知道出了什么问题。有人可以指出我正确的方向。

0 投票
1 回答
1354 浏览

c - 使用 CMake 构建错误

尝试使用 CMake 构建 flex and lemon 项目时出现构建错误。你能帮我找出问题所在吗?

我的 CMake 构建文件是

0 投票
2 回答
727 浏览

c - 使用 flex-lexer 和 cmake 构建错误

我正在学习 cmake 和 flex-lexer,但根据 make 的错误消息,我遇到了错误代码 2 的构建问题:

我的构建文件是

是我必须更改的编译器选项吗?我的文件结构是:

我的弹性语法是

0 投票
2 回答
133 浏览

c - 是语法错误还是代码错误?

我不确定这种语法对于也应该能够执行单引号和双引号的 shell 命令语言是否正确。似乎非平凡的命令可以工作ls -al | sort | wc -l,但简单的命令不适用于单引号:echo 'foo bar'不起作用。

我的扫描和解析外壳的代码是

CMake 构建文件是

我的项目在我的 github上可用。一个典型的 shell 会话,由于一些错误,只有一些命令可以工作,如下所示。

我可以观察到这两个命令都有相同的错误:当我们希望它导致时出现echo 'foo bar'乱码,以便 shell 去掉引号并像这样执行命令{echo} {'}{echo} {foo bar}

char *cmd[] = { "/usr/bin/echo", "foo bar", 0 };

0 投票
2 回答
828 浏览

c - 如何将 GNU readline 与 flex-lexer 一起使用?

我认为使用 GNU Readline 库作为命令行提示符很好,我希望我正在处理的 shell 具有该功能。现在 readline 对我有用(我的环境是 CLion、CMake、Ubuntu、BSD、C、flex-lexer 和柠檬解析器)但我还需要 flex 和 yacc 同时工作以扫描和解析输入,但代码似乎“不相容”——真的吗?

上面的代码具有解析和扫描功能,并注释掉了如果我同时想要两者都不起作用的 readline 功能。我可以让它工作吗?

0 投票
2 回答
105 浏览

c - 为什么未知变量“mystring”?

我正在尝试调试为什么我的变量mystring在我认为它应该是根据较早的问题时不知道

是语法错误还是代码错误?

我的语法是

然后我的主循环是

mystring当我期望它是什么时,为什么是null ?我得到一个分段错误:

整个项目在我的 github 上