aboutsummaryrefslogtreecommitdiff
path: root/nodes.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2012-12-26 18:28:06 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2012-12-26 18:28:06 +0200
commit7a6713bfe87b2c8d61f5a0800f08ade01fdf93ea (patch)
tree1f58eae468451a4f6d1bd9ac37302b30217343da /nodes.py
parent9a2eb973d4c707876d55ee069d9cda0306dc1bad (diff)
downloadmeson-7a6713bfe87b2c8d61f5a0800f08ade01fdf93ea.zip
meson-7a6713bfe87b2c8d61f5a0800f08ade01fdf93ea.tar.gz
meson-7a6713bfe87b2c8d61f5a0800f08ade01fdf93ea.tar.bz2
Created AST node types.
Diffstat (limited to 'nodes.py')
-rw-r--r--nodes.py77
1 files changed, 77 insertions, 0 deletions
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.')