【发布时间】:2012-10-11 19:10:44
【问题描述】:
我正在使用 ANTLR 创建一种语言,并使用 expr.g 示例开始了一种基础语言。我正在使用 ANTLR 3。我已准备好处理比 int 更多的数据类型,环顾四周后,我发现了 Bart Kiers 的浮点数示例,here。
在他的示例中,他有表达式 return float,然而,这意味着它不返回 int。我对如何让返回规则允许多种返回类型感到困惑?我在想我可以创建一个包含整数和浮点数的组合“数字”类型并返回它,但是当然我遇到了在 Java 中我必须专门返回一个整数或浮点数的问题。我是否必须有两个版本的表达式代码,每个数据类型一个?我认为这不是必需的,但我很难过......我可以想象对表达式使用可选规则(即 float 或 int 在此表达式中有效),但返回类型本身需要特定类型。很抱歉重复我自己,但我希望我清楚自己的困惑。
以及表达式语法部分:
expr returns [int value]
: e=mexpr {$value = $e.value;}
( PLUS e=mexpr {$value += $e.value;}
| MINUS e=mexpr {$value -= $e.value;}
)*
;
与巴特的比较:
additionExp returns [double value]
: m1=multiplyExp {$value = $m1.value;}
( '+' m2=multiplyExp {$value += $m2.value;}
| '-' m2=multiplyExp {$value -= $m2.value;}
)*
;
当然,我们的规则是使用适当的数据类型(我是 int,他是 float)...
【问题讨论】: