Created AST node types.

pull/15/head
Jussi Pakkanen 12 years ago
parent 9a2eb973d4
commit 7a6713bfe8
  1. 1
      builderparser.py
  2. 77
      nodes.py

@ -16,6 +16,7 @@
import ply.lex as lex import ply.lex as lex
import ply.yacc as yacc import ply.yacc as yacc
import nodes
tokens = ['LPAREN', tokens = ['LPAREN',
'RPAREN', 'RPAREN',

@ -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.')
Loading…
Cancel
Save