表达式语言详解:从语法到类型检查
1. 运算符优先级与语法规则
在处理表达式时,运算符优先级是一个关键问题。加法和减法具有相同的算术运算符优先级,因此可以在同一个规则中处理。而乘法和除法的优先级高于加法和减法,在定义语法规则时,需要先定义优先级较低的运算符规则。
以下是更新后的语法规则:
Expression: PlusOrMinus;
PlusOrMinus returns Expression:
MulOrDiv (
({Plus.left=current} '+' | {Minus.left=current} '-')
right=MulOrDiv
)* ;
MulOrDiv returns Expression:
Atomic (
({MulOrDiv.left=current} op=('*'|'/'))
right=Atomic
)* ;
在这些规则中,使用 returns 来指定创建对象的类型。在生成的 Java 类中, left 和 right 特征将是 Expression 类型。对于 PlusOrMinus 规则,只会创建 Plus 和 Minus 类的对象;而对于 MulOrDiv 规则,会创建 MulOrDiv 类的对象。
2. 优先级测试
为了验证
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



