|
|
1
2
优先声明背后的思想是,它们使用简单的单标记先行和配置的优先权来解决含糊不清的问题(或者更准确地说,移位/减少冲突)。如果语法没有移位/减少冲突,则不会使用优先声明,但如果使用了它们,则会根据(静态)优先关系,使用它们来抑制移位或减少。
在您的语言中,不可能静态地解决移位/减少冲突的不确定性,正如您在问题中注意到的那样。您的语法不是lr(1),更不是运算符优先级,因此,glr解析是一个实用的解决方案。但是你必须允许GLR去做它的工作。过早地通过优先级比较消除其中一个可能的解析器将阻止GLR算法稍后考虑它。如果您设法消除唯一可能是正确的解析,那么这将特别严重。
在您的完整语言中,布尔表达式和算术表达式都有类似于运算符优先级的内容,但只在各自的域内。运算符优先级分析器(与yacc/bison的优先级声明等效)通过消除不同非终端之间的差异来工作;它不能处理类似于语法的语法,其中某些运算符在不同域(或不同域之间)具有不同的优先级。
|
|
|
2
2
这里还有其他问题。一种表达式,如
|
|
|
3
0
上面提到的代码工作得很好,但是我从来没有让它在我的实际项目中工作过,即使我看不到我的实际项目和这个代码之间的区别。
我有一个(公认的货物崇拜者)
|
|
|
Kris · Flex-新行无法识别 9 年前 |
|
|
omn_1 · yylineno为错误报告提供意外结果 9 年前 |
|
|
lluisrojass · 为什么Yacc/野牛规则没有用? 9 年前 |
|
|
dummydev · 如何根据下面的内容减少解析器堆栈或“取消移动”当前标记? 10 年前 |
|
|
gornvix · 分析多个文件时出现错误的lex状态 11 年前 |
|
|
Jason Kleban · 语法规范解决移位/减少冲突 14 年前 |
|
|
footy · 如何解决2+2和2++2冲突 14 年前 |
|
|
KAction · Bison意外的标识符错误 14 年前 |