我正在使用 ANTLR 创建一种语言,并使用 expr.g 示例开始了一种基础语言。我正在使用 ANTLR 3。我已准备好处理比 int 更多的数据类型,环顾四周后,我在这里找到了 Bart Kiers 的浮点数的精彩示例。
在他的示例中,他有表达式 return float,然而,这意味着它不返回 int。我对如何让返回规则允许多种返回类型感到困惑?我在想我可以创建一个结合了整数和浮点数的组合“数字”类型并返回它,但是当然我遇到了在 Java 中我必须专门返回一个整数或浮点数的问题。我是否必须有两个版本的表达式代码,每个数据类型一个?我认为这不是必需的,但我很难过......我可以想象对表达式使用可选规则(即在这个表达式中浮点或 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)......