我在 ANTLR 中制作一种语言,其中数字序列是一个数字。然而,一系列数字、字母和下划线是标识符。所以,例如:
234
, 0243
, 0
, 11
foo
,2foo
,foo2
,2y8
但是,我也有运算符,比如乘法、加法、除法……它们都工作正常,除了一个运算符,它是科学运算符
e
(或E
)。与大多数其他语言不同,科学数字的 e
被认为是数字本身的一部分(如 2e3
),在我的语言中,e
被认为是运算符本身。因此,例如,(2+5)e4
是有效的。
然而,这带来了一个问题:因为
e
是一个字母,除非我将我的科学数字分隔成空格,否则 ANTLR 将 2e3
识别为标识符而不是操作 2-e-3.
我希望语言始终将
e
视为运算符,而不是标识符的一部分,如果 e 两边的内容不是字母或下划线,或者它是单独的。所以,例如:
,
2e3
,
2 e 3
以下被视为标识符:
2E3
,
2e 3
,
2 e3
,
23.4e78.9
,
5e($my_var)
,
.0e4
,
-7e3
.我有以下最小复制示例:
7e+9