Лекс Парсинг для экспоненты - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь разобрать файл, данные выглядят как

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

И NUMBER определяется в токруле как

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/

1 Ответ

1 голос
/ 11 февраля 2020

Часть вашего правила, которая соответствует показателям, равна

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

Очевидно, что это не будет соответствовать +. Оно должно быть:

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

Кроме того, оно будет соответствовать 0 или более показателям, что неверно. Должен соответствовать 0 или 1:

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