问题标签 [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.
compiler-construction - 消除减少/减少冲突
我为具有以下语法的语言创建了一个编译器,由 ML-Yacc 定义(起始符号是底部定义的“程序”):
这个语法很好,但是现在我想引入参数多态性,因此在语法中添加了以下产生式:
现在我遇到了以下 2 个减少/减少冲突,我不知道如何解决
谁能告诉我如何消除这两个冲突?
编辑:这是来自 mlyacc http://pastebin.com/2w26ytuV的完整 .desc 输出。并不是说这个也显示了 2 个良性移位/减少错误
parsing - Ml-yacc 解析问题.. 处理类型“单元”
首先,这是一个家庭作业。我必须制作一个可以解析此处描述的语言的程序:http ://www.cs.princeton.edu/courses/archive/spring12/cos320/resources/fun_language_definition.html
这是 Fun 语言的一个示例:
这应该被解析为:
我将给出我的代码的某些部分的快照:
然后 Exp 将继续以 Fun 语言进行各种可能的表达。我还有一些上部声明终端、非终端、关联规则。
现在我遇到的最大问题是在编译我的代码后这些 SML 消息:
我使用非终端的方式有问题吗?在解析时,这个错误通常会说什么?这个错误从下到上传播,所以我一直在尝试用虚拟值进行各种替换以使错误消失 - 直到我来到这里。如何解决这个问题?
yacc - ML-Yacc 错误涉及涉及 EXP 的 12 个移位/减少冲突 -> EXP BINOP EXP
这是错误:
这是语法:
我该如何解决这个问题?我是否需要重新思考语法并找到另一种方式来描述这种语法?
我也尝试过声明偏好顺序(尽管我使用这些的经验非常少),例如:
但什么都没有。
c++ - bison/yacc 文件中使用的语言
我想知道 yacc/bison 文件中规则部分的大括号中使用的语言是什么,如下所示,是否有任何好的参考。
并在上面的代码中,例如,为什么它$<stmt>$2
不仅仅是写$2
parsing - ML-Yacc Tiger Parser 减少/减少错误
我正在通过 Appel 的“现代编译器在 ML 中实现”一书中生成 Tiger Parser 的 Ch3 编程练习。我的tiger.grm 文件在这里。我试图诊断的错误是由一元和二元减号运算符的规则引起的减少-减少冲突。这是 yacc 错误:
我已经定义了 UNARY 的优先级高于 MINUS,并在我的规则中使用%prec
. 当然,当我删除任一规则时,冲突就会消失,但语法会错误地解析 MINUS 符号。
我无法诊断此错误 - 有什么想法吗?
parsing - ML-Yacc Tiger Parser 无法正确解析左值
我正在使用 ML-Yacc 在 SML中处理我的Tiger 编译器的解析器组件。我的语法文件找不到任何明显的问题(我使用优先级规则来解决所有移位减少冲突),但它似乎永远不会使用 的第二个和第三个规则来减少lvalue
,我指定如下:
的语法exp
是:
在尝试 parsea[0] := 5
时,我希望它使用第四exp
条规则(其中lvalue
is lvalue LBRACK exp RBRACK
)减少。相反,Yacc 发现语法错误并使用第三条规则ASSIGN
替换和解析。OF
exp
类似的问题也发生在lvalue DOT ID
.
parsing - 解析器中与 IF-THEN-ELSE 三元运算符的命题逻辑冲突
我想为命题逻辑实现解析器,它具有以下优先级递减顺序的运算符:
- 不是 p
- p 和 q
- p 或 q
- 如果 p 那么 q
- p IFF q
- 如果 p 那么 q 其他
主要问题在于 IF-THEN-ELSE 运算符。没有它,我能够正确地编写语法。目前我的 yacc 文件看起来像
但是我似乎没有正确的想法来消除减少转移冲突。正确解析的一些示例是:
- IF a THEN IF b THEN c________a->(b->c)
- IF a THEN IF b THEN c ELSE d IFF e OR f_______IFTHENELSE(a,b->c,d<=>e/\f)
任何帮助/指针都会非常有帮助。谢谢。
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?