From 1214839af24d8458e23f8edba7ed4375aff0ca3b Mon Sep 17 00:00:00 2001 From: Pearu Peterson Date: Thu, 18 Jan 2007 10:25:55 +0000 Subject: G3 F2PY: Fixed parsing a*b**c expression. --- numpy/f2py/lib/parser/pattern_tools.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'numpy/f2py/lib/parser/pattern_tools.py') diff --git a/numpy/f2py/lib/parser/pattern_tools.py b/numpy/f2py/lib/parser/pattern_tools.py index 9c840edd9..3c009a6a8 100644 --- a/numpy/f2py/lib/parser/pattern_tools.py +++ b/numpy/f2py/lib/parser/pattern_tools.py @@ -261,10 +261,10 @@ part_ref = name + ~((r'[(]' + name + r'[)]')) data_ref = part_ref + ~~~(r'[%]' + part_ref) primary = constant | name | data_ref | (r'[(]' + name + r'[)]') -power_op = Pattern('','[*]{2}') -mult_op = Pattern('',r'[/*]') +power_op = Pattern('',r'(?',r'(?',r'[+-]') -concat_op = Pattern('',r'[/]{2}') +concat_op = Pattern('',r'(?','[.]EQ[.]|[.]NE[.]|[.]LT[.]|[.]LE[.]|[.]GT[.]|[.]GE[.]|[=]{2}|/[=]|[<][=]|[<]|[>][=]|[>]',flags=re.I) not_op = Pattern('','[.]NOT[.]',flags=re.I) and_op = Pattern('','[.]AND[.]',flags=re.I) @@ -372,6 +372,29 @@ def _test(): assert m.match('HEY_"adadfa"') assert m.match('HEY _ "ad\tadfa"') assert not m.match('adadfa') + + def assert_equal(result, expect): + try: + assert result==expect + except AssertionError, msg: + raise AssertionError,"Expected %r but got %r: %s" \ + % (expect, result, msg) + + m = mult_op.named() + assert m.rsplit('a * b') + assert_equal(m.lsplit('a * c* b'),('a','*','c* b')) + assert_equal(m.rsplit('a * c* b'),('a * c','*','b')) + assert_equal(m.lsplit('a * b ** c'),('a','*','b ** c')) + assert_equal(m.rsplit('a * b ** c'),('a','*','b ** c')) + assert_equal(m.lsplit('a * b ** c * d'),('a','*','b ** c * d')) + assert_equal(m.rsplit('a * b ** c * d'),('a * b ** c','*','d')) + + m = power_op.named() + assert m.rsplit('a ** b') + assert_equal(m.lsplit('a * b ** c'),('a * b','**','c')) + assert_equal(m.rsplit('a * b ** c'),('a * b','**','c')) + assert_equal(m.lsplit('a ** b ** c'),('a','**','b ** c')) + assert_equal(m.rsplit('a ** b ** c'),('a ** b','**','c')) print 'ok' if __name__ == '__main__': -- cgit v1.2.1