diff --git a/pymbolic/parser.py b/pymbolic/parser.py index cea1e2a7159ce5f54d5a8493c447d9f4f18e26dc..7a48d13ff6cec4eccdd2b0a7d5b29eaea075ce76 100644 --- a/pymbolic/parser.py +++ b/pymbolic/parser.py @@ -105,17 +105,17 @@ class Parser: (_imaginary, (_float, pytools.lex.RE("j"))), (_float, ("|", # has a letter tag - pytools.lex.RE(r"[+-]?[0-9]+([a-zA-Z]+)"), + pytools.lex.RE(r"[0-9]+([a-zA-Z]+)"), # has digits before the dot (after optional) pytools.lex.RE( - r"[+-]?[0-9]+\.[0-9]*([eEdD][+-]?[0-9]+)?([a-zA-Z]*)"), + r"[0-9]+\.[0-9]*([eEdD][+-]?[0-9]+)?([a-zA-Z]*)"), pytools.lex.RE( - r"[+-]?[0-9]+(\.[0-9]*)?[eEdD][+-]?[0-9]+([a-zA-Z]*)\b"), + r"[0-9]+(\.[0-9]*)?[eEdD][+-]?[0-9]+([a-zA-Z]*)\b"), # has digits after the dot (before optional) pytools.lex.RE( - r"[+-]?[0-9]*\.[0-9]+([eEdD][+-]?[0-9]+)?([a-zA-Z]*)"), + r"[0-9]*\.[0-9]+([eEdD][+-]?[0-9]+)?([a-zA-Z]*)"), pytools.lex.RE( - r"[+-]?[0-9]*\.[0-9]+[eEdD][+-]?[0-9]+([a-zA-Z]*)\b"))), + r"[0-9]*\.[0-9]+[eEdD][+-]?[0-9]+([a-zA-Z]*)\b"))), (_int, pytools.lex.RE(r"[0-9]+")), (_plus, pytools.lex.RE(r"\+")), (_minus, pytools.lex.RE(r"-")), diff --git a/test/test_pymbolic.py b/test/test_pymbolic.py index 7df9f1420658ac9abce309b144059cb7e0ce0958..00fb007016e6e8f4fa02b436f59dae46bf02f3b8 100644 --- a/test/test_pymbolic.py +++ b/test/test_pymbolic.py @@ -221,6 +221,11 @@ def test_parser(): print(repr(parse("3::1"))) print(repr(parse(":5:1"))) print(repr(parse("3:5:1"))) + print(repr(parse("g[i,k]+2.0*h[i,k]"))) + print(repr(parse("g[i,k]+(+2.0)*h[i,k]"))) + print(repr(parse("a - b - c"))) + print(repr(parse("-a - -b - -c"))) + print(repr(parse("- - - a - - - - b - - - - - c"))) print(parse("3::1"))