[Numpy-svn] r3512 - trunk/numpy/f2py/lib/parser
numpy-svn at scipy.org
numpy-svn at scipy.org
Thu Jan 18 05:25:59 EST 2007
Author: pearu
Date: 2007-01-18 04:25:55 -0600 (Thu, 18 Jan 2007)
New Revision: 3512
Modified:
trunk/numpy/f2py/lib/parser/pattern_tools.py
Log:
G3 F2PY: Fixed parsing a*b**c expression.
Modified: trunk/numpy/f2py/lib/parser/pattern_tools.py
===================================================================
--- trunk/numpy/f2py/lib/parser/pattern_tools.py 2007-01-15 06:53:06 UTC (rev 3511)
+++ trunk/numpy/f2py/lib/parser/pattern_tools.py 2007-01-18 10:25:55 UTC (rev 3512)
@@ -261,10 +261,10 @@
data_ref = part_ref + ~~~(r'[%]' + part_ref)
primary = constant | name | data_ref | (r'[(]' + name + r'[)]')
-power_op = Pattern('<power-op>','[*]{2}')
-mult_op = Pattern('<mult-op>',r'[/*]')
+power_op = Pattern('<power-op>',r'(?<![*])[*]{2}(?![*])')
+mult_op = Pattern('<mult-op>',r'(?<![*])[*](?![*])|(?<![/])[/](?![/])')
add_op = Pattern('<add-op>',r'[+-]')
-concat_op = Pattern('<concat-op>',r'[/]{2}')
+concat_op = Pattern('<concat-op>',r'(?<![/])[/]{2}(?![/])')
rel_op = Pattern('<rel-op>','[.]EQ[.]|[.]NE[.]|[.]LT[.]|[.]LE[.]|[.]GT[.]|[.]GE[.]|[=]{2}|/[=]|[<][=]|[<]|[>][=]|[>]',flags=re.I)
not_op = Pattern('<not-op>','[.]NOT[.]',flags=re.I)
and_op = Pattern('<and-op>','[.]AND[.]',flags=re.I)
@@ -372,6 +372,29 @@
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__':
More information about the Numpy-svn
mailing list