From ab6515bc125f9289e21f6995d201c5c9774e3eea Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Sun, 15 Mar 2015 08:45:14 -0600 Subject: [PATCH] Fix parsing corner cases --- pymbolic/parser.py | 10 +++++----- test/test_pymbolic.py | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pymbolic/parser.py b/pymbolic/parser.py index cea1e2a..7a48d13 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 7df9f14..00fb007 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")) -- GitLab