compiler-construction - 如何在上下文无关文法中判断运算符的优先级

标签 compiler-construction grammar context-free-grammar

我们如何知道以下哪个逻辑操作(或,和,非)在波纹管上下文无关文法中具有更高的优先级?是否有解决此类问题的通用方法?

X → X 或 Y |是

Y → Y 和 Z | Z

Z → 不是 Z | (X) |真实|错误的

最佳答案

这是一个示例方法:

expr -> addExpr;
addExpr -> multExpr (('+'|'-') multExpr)*;
multExpr -> terminalExpr (('*'|'/') terminalExpr)*;
terminalExpr -> integer | variable | '(' expr ')';

但是关联性是不明确的。这是 BNF 中更明确的方式:
expr -> addExpr;
addExpr -> addExpr '+' multExpr | addExpr '-' multExpr | multExpr;
multExpr -> multExpr '*' terminalExpr | multExpr '/' terminalExpr | terminalExpr;
terminalExpr -> integer | variable | '(' expr ')';

这些语法将操作符 */ 定义为比 +- 具有更高的优先级。您在解析树的更深处声明具有更高优先级的操作,因此解析器将首先尝试它们。

关于compiler-construction - 如何在上下文无关文法中判断运算符的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471876/

相关文章:

ios - SWIFT ABI 在哪里出现?

context-free-grammar - 非上下文无关的递归可枚举语言的示例

context-free-grammar - L* 和 Σ* 之间的差异

c++ - 模板的循环包含

java - ANTLR v4 : How to implement deactivation of rule alternatives in listener like embedded semantic predicate in grammar file?

c# - 如果 C# 中的关键字未在系统类中定义,那么它们在 CLR 中的哪里?

parsing - 规范语法中的结构差异

parsing - 手动计算第一组

unicode - ANTLR4:在 token 规则中使用非 ASCII 字符

python - 如何在常规语法模型中实现通配符、字符类、否定字符类等?