指数的 Lex 解析

Lex Parsing for exponent

我正在尝试解析数据看起来像的文件

size = [5e+09, 5e+09, 5e+09]
I have 'size OSQUARE NUMBER COMMA NUMBER COMMA NUMBER ESQUARE'

NUMBER 在 tokrules 中定义为

t_NUMBER  = r'[-]?[0-9]*[\.]*[0-9]+([eE]-?[0-9]+)*'

但我明白了

Syntax error in input!
LexToken(ID,'e',6,113)
Illegal character '+'
Illegal character '+'
Illegal character '+'

我的 NUMBER 定义有什么问题?

我正在使用 https://www.dabeaz.com/ply/

匹配指数的规则部分是

([eE]-?[0-9]+)*

显然,这与 + 不匹配。应该是:

([eE][-+]?[0-9]+)*

此外,它会匹配 0 个或多个指数,这是不正确的。它应该匹配 0 或 1:

([eE][-+]?[0-9]+)?