From 7a6713bfe87b2c8d61f5a0800f08ade01fdf93ea Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Wed, 26 Dec 2012 18:28:06 +0200 Subject: [PATCH] Created AST node types. --- builderparser.py | 1 + nodes.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 nodes.py diff --git a/builderparser.py b/builderparser.py index 778e09f4e..e3411db3f 100755 --- a/builderparser.py +++ b/builderparser.py @@ -16,6 +16,7 @@ import ply.lex as lex import ply.yacc as yacc +import nodes tokens = ['LPAREN', 'RPAREN', diff --git a/nodes.py b/nodes.py new file mode 100644 index 000000000..0a2f154a1 --- /dev/null +++ b/nodes.py @@ -0,0 +1,77 @@ +#!/usr/bin/python3 -tt + +# Copyright 2012 Jussi Pakkanen + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +class Node(): + pass + +class Expression(Node): + pass + +class Statement(Node): + pass + +class AtomExpression(Expression): + def __init__(self, value): + Expression.__init__(self) + self.value = value + +class StringExpression(Expression): + def __init__(self, value): + Expression.__init__(self) + self.value = value + +class AtomStatement(Statement): + def __init__(self, value): + Statement.__init__(self) + assert(type(value) == type('')) + self.value = value + +class StringStatement(Statement): + def __init__(self, value): + assert(type(value) == type('')) + Statement.__init__(self) + self.value = value + +class FunctionCall(Statement): + def __init__(self, func_name, arguments): + Statement.__init__(self) + self.func_name = func_name + self.arguments = arguments + +class MethodCall(Statement): + def __init__(self, object_name, method_name, arguments): + Statement.__init__(self) + self.object_name = object_name + self.method_name = method_name + self.arguments = arguments + +class Assignment(Statement): + def __init__(self, var_name, value): + Statement.__init__(self) + self.var_name = var_name + self.value = value + +class CodeBlock(Statement): + def __init__(self): + Statement.__init__(self) + self.statements = [] + +def statement_from_expression(expr): + if type(expr) == type(AtomExpression(None)): + return AtomStatement(expr.value) + if type(expr) == type(StringExpression(None)): + return StringStatement(expr.value) + raise RuntimeError('Can not convert unknown expression to a statement.')