diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-16 22:55:22 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-03-16 22:55:22 +0200 |
commit | c74f0f3a3b0044cfd824f5b17be39a50a00ddcb9 (patch) | |
tree | 12ec27bb77347a10a5f3e1585c4a805be4be7e42 /interpreter.py | |
parent | 5658127392c422f4760675fd23844402ea81d975 (diff) | |
download | meson-c74f0f3a3b0044cfd824f5b17be39a50a00ddcb9.zip meson-c74f0f3a3b0044cfd824f5b17be39a50a00ddcb9.tar.gz meson-c74f0f3a3b0044cfd824f5b17be39a50a00ddcb9.tar.bz2 |
Can parse first unit test with recursive descent parser.
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/interpreter.py b/interpreter.py index d25b251..5e0e292 100644 --- a/interpreter.py +++ b/interpreter.py @@ -711,31 +711,31 @@ class Interpreter(): self.variables[varname] = variable def evaluate_statement(self, cur): - if isinstance(cur, nodes.FunctionCall): + if isinstance(cur, mparser2.FunctionNode): return self.function_call(cur) - elif isinstance(cur, nodes.Assignment): + elif isinstance(cur, mparser2.AssignmentNode): return self.assignment(cur) - elif isinstance(cur, nodes.MethodCall): + elif isinstance(cur, mparser2.MethodNode): return self.method_call(cur) - elif isinstance(cur, nodes.StringStatement): + elif isinstance(cur, mparser2.StringNode): return cur - elif isinstance(cur, nodes.BoolStatement): + elif isinstance(cur, mparser2.BooleanNode): return cur - elif isinstance(cur, nodes.IfStatement): + elif isinstance(cur, mparser2.IfNode): return self.evaluate_if(cur) - elif isinstance(cur, nodes.AtomStatement): - return self.get_variable(cur.get_value()) - elif isinstance(cur, nodes.Comparison): + elif isinstance(cur, mparser2.IdNode): + return self.get_variable(cur.value) + elif isinstance(cur, mparser2.EqualNode): # FIXME, should be comparison return self.evaluate_comparison(cur) - elif isinstance(cur, nodes.ArrayStatement): + elif isinstance(cur, mparser2.ArrayNode): return self.evaluate_arraystatement(cur) - elif isinstance(cur, nodes.IntStatement): + elif isinstance(cur, mparser2.NumberNode): return cur - elif isinstance(cur, nodes.AndStatement): + elif isinstance(cur, mparser2.AndNode): return self.evaluate_andstatement(cur) - elif isinstance(cur, nodes.OrStatement): + elif isinstance(cur, mparser2.OrNode): return self.evaluate_orstatement(cur) - elif isinstance(cur, nodes.NotStatement): + elif isinstance(cur, mparser2.NotNode): return self.evaluate_notstatement(cur) else: raise InvalidCode("Unknown statement.") @@ -1184,8 +1184,8 @@ class Interpreter(): raise InterpreterException('Tried to add non-existing source %s.' % s) def function_call(self, node): - func_name = node.get_function_name() - (posargs, kwargs) = self.reduce_arguments(node.arguments) + func_name = node.func_name + (posargs, kwargs) = self.reduce_arguments(node.args) if func_name in self.funcs: return self.funcs[func_name](node, posargs, kwargs) else: @@ -1201,10 +1201,10 @@ class Interpreter(): return False def assignment(self, node): + assert(isinstance(node, mparser2.AssignmentNode)) var_name = node.var_name - if not isinstance(var_name, nodes.AtomExpression): + if not isinstance(var_name, str): raise InvalidArguments('Tried to assign value to a non-variable.') - var_name = var_name.get_value() value = self.evaluate_statement(node.value) if value is None: raise InvalidCode('Can not assign None to variable.') @@ -1215,27 +1215,27 @@ class Interpreter(): return value def reduce_single(self, arg): - if isinstance(arg, nodes.AtomExpression) or isinstance(arg, nodes.AtomStatement): + if isinstance(arg, mparser2.IdNode): return self.get_variable(arg.value) elif isinstance(arg, str): return arg - elif isinstance(arg, nodes.StringExpression) or isinstance(arg, nodes.StringStatement): - return arg.get_value() - elif isinstance(arg, nodes.FunctionCall): + elif isinstance(arg, mparser2.StringNode): + return arg.value + elif isinstance(arg, mparser2.FunctionNode): return self.function_call(arg) - elif isinstance(arg, nodes.MethodCall): + elif isinstance(arg, mparser2.MethodNode): return self.method_call(arg) - elif isinstance(arg, nodes.BoolStatement) or isinstance(arg, nodes.BoolExpression): - return arg.get_value() - elif isinstance(arg, nodes.ArrayStatement): + elif isinstance(arg, mparser2.BooleanNode): + return arg.value + elif isinstance(arg, mparser2.ArrayNode): return [self.reduce_single(curarg) for curarg in arg.args.arguments] - elif isinstance(arg, nodes.IntStatement): - return arg.get_value() + elif isinstance(arg, mparser2.NumberNode): + return arg.value else: raise InvalidCode('Irreducible argument.') def reduce_arguments(self, args): - assert(isinstance(args, nodes.Arguments)) + assert(isinstance(args, mparser2.ArgumentNode)) if args.incorrect_order(): raise InvalidArguments('All keyword arguments must be after positional arguments.') reduced_pos = [self.reduce_single(arg) for arg in args.arguments] @@ -1255,10 +1255,10 @@ class Interpreter(): raise InterpreterException('Unknown method "%s" for a string.' % method_name) def to_native(self, arg): - if isinstance(arg, nodes.StringStatement) or \ - isinstance(arg, nodes.IntStatement) or \ - isinstance(arg, nodes.BoolStatement): - return arg.get_value() + if isinstance(arg, mparser2.StringNode) or \ + isinstance(arg, mparser2.NumberNode) or \ + isinstance(arg, mparser2.BooleanNode): + return arg.value return arg def format_string(self, templ, args): |