From d5a5da520b1eddd10a7dde79b0e7df281ee1abaa Mon Sep 17 00:00:00 2001 From: Pearu Peterson Date: Thu, 22 Jun 2006 10:25:57 +0000 Subject: Cont. impl. Fortran parser. --- numpy/f2py/lib/statements.py | 645 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 645 insertions(+) create mode 100644 numpy/f2py/lib/statements.py (limited to 'numpy/f2py/lib/statements.py') diff --git a/numpy/f2py/lib/statements.py b/numpy/f2py/lib/statements.py new file mode 100644 index 000000000..09b60d328 --- /dev/null +++ b/numpy/f2py/lib/statements.py @@ -0,0 +1,645 @@ + +import re +import sys + +from base_classes import Statement + +# Execution statements + +class Assignment(Statement): + """ + = + => + """ + + match = re.compile(r'\w(\s*\(\s*[^)]*\)|[\w%]*)*\s*=\>?',re.I).match + item_re = re.compile(r'(?P\w(\s*\(\s*[^)]*\)|[\w%]*)*)\s*(?P=\>?)\s*(?P.*)\Z',re.I).match + + def process_item(self): + m = self.item_re(self.item.get_line()) + self.variable = m.group('variable').replace(' ','') + self.sign = m.group('sign') + self.expr = m.group('expr') + return + + def __str__(self): + return self.get_indent_tab() + '%s %s %s' \ + % (self.variable, self.sign, self.expr) + +class Call(Statement): + """Call statement class + CALL [([arg-spec-list])] + + Call instance has attributes: + designator + arg_list + """ + match = re.compile(r'call\b', re.I).match + + def process_item(self): + item = self.item + line = item.get_line()[4:].strip() + i = line.find('(') + self.arg_list = [] + if i==-1: + self.designator = line.strip() + else: + self.designator = line[:i].strip() + for n in line[i+1:-1].split(','): + n = n.strip() + if not n: continue + self.arg_list.append(n) + return + + def __str__(self): + s = self.get_indent_tab() + 'CALL '+str(self.designator) + if self.arg_list: + s += '('+', '.join(map(str,self.arg_list))+ ')' + return s + +class Goto(Statement): + """ + GO TO