问题标签 [ml-yacc]

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 投票
2 回答
470 浏览

compiler-construction - 消除减少/减少冲突

我为具有以下语法的语言创建了一个编译器,由 ML-Yacc 定义(起始符号是底部定义的“程序”):

这个语法很好,但是现在我想引入参数多态性,因此在语法中添加了以下产生式:

现在我遇到了以下 2 个减少/减少冲突,我不知道如何解决

谁能告诉我如何消除这两个冲突?

编辑:这是来自 mlyacc http://pastebin.com/2w26ytuV的完整 .desc 输出。并不是说这个也显示了 2 个良性移位/减少错误

0 投票
1 回答
258 浏览

parsing - Ml-yacc 解析问题.. 处理类型“单元”

首先,这是一个家庭作业。我必须制作一个可以解析此处描述的语言的程序:http ://www.cs.princeton.edu/courses/archive/spring12/cos320/resources/fun_language_definition.html

这是 Fun 语言的一个示例:

这应该被解析为:

我将给出我的代码的某些部分的快照:

然后 Exp 将继续以 Fun 语言进行各种可能的表达。我还有一些上部声明终端、非终端、关联规则。

现在我遇到的最大问题是在编译我的代码后这些 SML 消息:

我使用非终端的方式有问题吗?在解析时,这个错误通常会说什么?这个错误从下到上传播,所以我一直在尝试用虚拟值进行各种替换以使错误消失 - 直到我来到这里。如何解决这个问题?

0 投票
1 回答
338 浏览

yacc - ML-Yacc 错误涉及涉及 EXP 的 12 个移位/减少冲突 -> EXP BINOP EXP

这是错误:

这是语法:

我该如何解决这个问题?我是否需要重新思考语法并找到另一种方式来描述这种语法?

我也尝试过声明偏好顺序(尽管我使用这些的经验非常少),例如:

但什么都没有。

0 投票
1 回答
89 浏览

c++ - bison/yacc 文件中使用的语言

我想知道 yacc/bison 文件中规则部分的大括号中使用的语言是什么,如下所示,是否有任何好的参考。

并在上面的代码中,例如,为什么它$<stmt>$2不仅仅是写$2

0 投票
2 回答
228 浏览

parsing - ML-Yacc Tiger Parser 减少/减少错误

我正在通过 Appel 的“现代编译器在 ML 中实现”一书中生成 Tiger Parser 的 Ch3 编程练习。我的tiger.grm 文件在这里。我试图诊断的错误是由一元和二元减号运算符的规则引起的减少-减少冲突。这是 yacc 错误:

我已经定义了 UNARY 的优先级高于 MINUS,并在我的规则中使用%prec. 当然,当我删除任一规则时,冲突就会消失,但语法会错误地解析 MINUS 符号。

我无法诊断此错误 - 有什么想法吗?

0 投票
1 回答
311 浏览

parsing - ML-Yacc Tiger Parser 无法正确解析左值

我正在使用 ML-Yacc 在 SML中处理我的Tiger 编译器的解析器组件。我的语法文件找不到任何明显的问题(我使用优先级规则来解决所有移位减少冲突),但它似乎永远不会使用 的第二个和第三个规则来减少lvalue,我指定如下:

的语法exp是:

在尝试 parsea[0] := 5时,我希望它使用第四exp条规则(其中lvalueis lvalue LBRACK exp RBRACK)减少。相反,Yacc 发现语法错误并使用第三条规则ASSIGN替换和解析。OFexp

类似的问题也发生在lvalue DOT ID.

0 投票
2 回答
620 浏览

parsing - 解析器中与 IF-THEN-ELSE 三元运算符的命题逻辑冲突

我想为命题逻辑实现解析器,它具有以下优先级递减顺序的运算符:

  1. 不是 p
  2. p 和 q
  3. p 或 q
  4. 如果 p 那么 q
  5. p IFF q
  6. 如果 p 那么 q 其他

主要问题在于 IF-THEN-ELSE 运算符。没有它,我能够正确地编写语法。目前我的 yacc 文件看起来像

但是我似乎没有正确的想法来消除减少转移冲突。正确解析的一些示例是:

  1. IF a THEN IF b THEN c________a->(b->c)
  2. IF a THEN IF b THEN c ELSE d IFF e OR f_______IFTHENELSE(a,b->c,d<=>e/\f)

任何帮助/指针都会非常有帮助。谢谢。

0 投票
1 回答
6 浏览

ml-yacc - Referencing Multiple Non-Terminals in Production with Same Name in Yacc

Let's assume I have the production:

Notice how I can't tell which Expression is which in my top most production's semantic action. How do I refer to the left and right Expression? What if I have three or more 'Expression's appear in the same production?