Search code examples
lexply

Lex Parsing for exponent


I am trying to parse a file the data looks like

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

And NUMBER is defined in tokrules as

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

But I get

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

What is wrong with my NUMBER definition?

I am using https://www.dabeaz.com/ply/


Solution

  • The part of your rule which matches exponents is

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

    Clearly, that won't match a +. It should be:

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

    Also, it will match 0 or more exponents, which is not correct. It should match 0 or 1:

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