问题标签 [bison]
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.
c++ - 使用 flex/yacc 编写 C++ 编译器需要多少时间?
使用 lex/yacc 编写 C++ 编译器需要多少时间?
我可以从哪里开始?
compiler-construction - 如何解析野牛中的if语句
我正在使用野牛为一种简单的语言构建编译器。这是语法的一部分:
我在解析这个 if 语句时遇到了一个问题:假设我有这个代码:
无论如何都会打印“hi”,因为 stmt->PRINT 在 stmt-> IF (exp) stmt 之前被解析。我能做些什么?(我是野牛和编译的新手,所以请随时纠正我的问题中的错误)。
user-interface - 如何为我的编译器创建一个 gui?
我使用 flex 作为词法分析器,使用 bison 作为解析器生成器,但是两者的结果都是控制台窗口,我想要一个 gui(如 ide),所以如何做到这一点。谢谢
c - 在 Bison 中使用 $n 表示 n < 0
Bison 有没有办法检查当前的令牌堆栈大小?
我想使用$n和n作为负数来访问另一个规则的语义值,但前提是堆栈足够大。
谢谢你。
bison - Bison 下 Shift/reduce 与类 C 语法的冲突
为了我的个人娱乐,我一直在研究一种类似 C 的语法。但是,我一直在遇到 shift/reduce 冲突,我很确定它们可以得到解决。
现在我expressions
看起来像这样,以简化的形式,剥离了动作:
但是,这会导致移位/减少冲突:解析器不确定如何处理括号。据我-v
所知,尚不清楚 like 表达式是否expr '+' expr '('
应该减少或expr '+' expr
移动expr
括号。
显然,我希望括号移动。foo % bar(4)
不应该最终成为(foo % bar)(4)
. 但是,我没有成功使用该%prec
指令来表示这个意思。在规则之后添加%left FUNCALL
and%prec FUNCALL
不会产生任何变化。
我知道 Bison 的 LALR 解析器在遇到 shift/reduce 时的默认路径是 shift,我可以用它%expect
来解决问题。但是,每个表达式都会产生一个冲突,我是否需要更改该列表,我还需要更改%expect
声明,这对我来说似乎是一个相当丑陋的解决方案。此外,我相信你们中的一个聪明的孩子有解决这个问题的办法。
我的目标是有一个类似于上面的规则,Bison 会知道,每当它遇到'('
from 函数调用规则时,它都会移动括号,而不会发生移位/减少冲突。作为记录,我对%prec
指令的使用如下,所以如果我做错了,你可以纠正我。它确实存在移位/减少冲突。
parsing - 我如何告诉 Bison 我也期望减少减少冲突?
我的 C#-ish 玩具语法现在有了它的第一个 reduce-reduce 冲突!我为我感到骄傲。
然而,这对我来说似乎没问题(我为此关闭了 GLR 解析器)。问题是,虽然我知道该%expect
指令可以关闭 Bison 关于移位/减少冲突的信息,但我找不到减少/减少冲突的等价物。那么我应该用什么来让它对我的 3 班次/减少和我的 2 次减少/减少保持沉默?
bison - 在哪里可以找到关于 flex 和 bison 的真实示例?
我需要一个关于 flex 和 bison 的例子,所以我可以学习如何构建 ast 树和符号表并进行语义分析
c++ - 如何编写野牛文件以自动使用 C 头文件中定义的令牌枚举列表?
我正在尝试使用 Bison/Yacc 构建一个解析器,以便能够解析另一个模块完成的令牌流。令牌已在枚举类型中列出,如下所示:
我已经多次阅读了 bison 的文档,但我找不到比复制 Bison 文件中的每个令牌更好的解决方案,如下所示:
如果我必须这样做,如果其他模块规范发生变化(这种情况经常发生),维护文件将变得非常困难。
你能告诉我怎么做吗,或者给我指出好的方向(欢迎任何想法/评论)。这对我有很大帮助!提前致谢。
c - 是否有在 Lex/Yacc 解析中捕获错误的经验法则?
我们是否应该尽早(在 Lex 中)解析通用语言时发现错误,或者在哪里更方便并为我们提供更多信息(在 Yacc 中)?各种语言如何解决这个问题?
qt - 使用 qt:如何在控制台应用程序之上构建一个 Gui?
我有一个从 bison(解析器)生成的控制台应用程序,我想为它构建一个简单的 gui,这样我就可以将输入从这个 gui 发送到控制台,并从控制台获取输出到 gui。我尝试使用 java 进程类来做到这一点,但它对我不起作用,请帮助我使用 qt 来做到这一点。