13得票5回答
用C++生成抽象语法树(AST)

我正在用C++制作一个解释器,目前已经完成了词法分析器的标记生成。问题在于我不确定如何生成并"遍历"语法树。 我考虑使用一个数组中包含多个数组来创建语法树,但是我不确定如何以正确的顺序将标记插入到语法树中。 我不确定是采用自顶向下、从左到右还是自底向上、从右到左的方式。 有没有人能提供一...

13得票3回答
如何解决移位/归约冲突?

我正在使用CUP创建一个我论文所需的解析器。我的语法中存在移进/规约冲突。我有这个产生式规则:command ::= IDENTIFIER | IDENTIFIER LPAREN parlist RPAREN; 我有这个警告:Warning : *** Shift/Reduce conflic...

10得票2回答
解决C++解析器中的歧义问题

我为C++17编写了一个LALR(1)解析器。我发现有156个二义性,其中一些可以根据标准解决,但其他一些则无法处理。 例如:在解析“operator+ < ......”时遇到小于号会导致移位-规约冲突: 我们可以将其解析为: (1) template-id -> operat...

9得票2回答
可视化LALR语法

我希望能够可视化一个语法文件(实际上是用于coffee-script的Jison 语法)。因此,输入文件是Bison/Yacc风格的语法文件。期望的输出可以是Graphviz点文件或类似的东西。 我并不一定要像GOLD那样完整的IDE。但是能够处理LALR输入很重要,这就是为什么出色的ANL...

8得票2回答
yacc/bison LALR(1)算法如何处理“空”规则?

在LALR(1)解析器中,语法中的规则被转换成一个解析表,有效地表示“如果您迄今为止有这个输入,并且向前看令牌是X,则移至状态Y,或按规则R减少”。我已经成功地在解释性语言(ruby)中构建了一个LALR(1)解析器,而没有使用生成器,而是在运行时计算解析表并使用该解析表评估输入。这很有效,并...

8得票2回答
在Windows上使用LALR(1)或GLR - 是否有比Bison++ / Flex++更好的替代方案?

更新:此问题已过时,但仅供参考。 原始问题 自2002年以来,我一直在使用相同版本的bison++(1.21-8)和flex++(2.3.8-7)。 目前我并不寻找LALR(1)或GLR的替代方案,只是想了解最新的选项。是否有人知道这些的后续版本除了原版以外还有没有依赖于Cygwin? ...

7得票1回答
将不应存在的节点放入解析树中

我正在编写一种语言的解析器,扫描器被设计成根据一个布尔标记来 返回不必要的终端(例如空格)或者 不返回。 现在,在解析器中,我不想用所有这些终端来混淆语法,它们应该以某种方式被解析树“自动地”吞噬掉。 为了做到这一点,“神奇”的方法是,我想把终端链接起来(简单的环形链表),这样我就可...

7得票5回答
如何修复由后增运算符引起的YACC移位/归约冲突?

我正在使用YACC(实际上是Bison)编写语法,但遇到了移位/归约问题。这是由于包含后缀递增和递减运算符引起的。以下是精简版本的语法: %token NUMBER ID INC DEC %left '+' '-' %left '*' '/' %right PR...

7得票1回答
语法是否可以自动指导解析器错误恢复?

我正在撰写一个作为个人项目的LALR解析器生成器。 我正在使用紫龙书来帮助我进行设计,从中了解到有四种解析器错误恢复方法: 紧急模式:开始转储输入符号,直到找到编译器设计者预先选择的符号 短语级别的恢复:修改输入字符串,使其能够减少当前产生物 错误产生物:通过将其纳入语法中预测错误 全局...

7得票5回答
有没有适用于.NET的好的yacc/bison类型的LALR解析器生成器?

有没有一个适用于.NET的好的yacc/bison类型的LALR解析器生成器?