aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuilderparser.py1
-rw-r--r--nodes.py77
2 files changed, 78 insertions, 0 deletions
diff --git a/builderparser.py b/builderparser.py
index 778e09f..e3411db 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 0000000..0a2f154
--- /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.')