From 3b5eed038d45f493a9b11cedc7882411e181eada Mon Sep 17 00:00:00 2001 From: Xun Yang <x299yang@uwaterloo.ca> Date: Mon, 24 Feb 2020 21:00:53 -0500 Subject: [PATCH] some more node changes --- LineNodes.py | 2 +- MemberNodes.py | 4 ++-- UnitNodes.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 UnitNodes.py diff --git a/LineNodes.py b/LineNodes.py index 0e3013b..cf12f40 100644 --- a/LineNodes.py +++ b/LineNodes.py @@ -1,6 +1,6 @@ from AST import ASTNode, getParseTreeNodes, getTypeName from Environment import Env -from WordNodes import ExprNode +from WordNodes import makeNodeFromExpr # containing line level nodes: block, for/while/if, declaration diff --git a/MemberNodes.py b/MemberNodes.py index 445f8c6..6a212d7 100644 --- a/MemberNodes.py +++ b/MemberNodes.py @@ -1,6 +1,6 @@ from AST import ASTNode, getParseTreeNodes, getTypeName from LineNodes import BlockNode -from WordNodes import ExprNode +from WordNodes import makeNodeFromExpr from Environment import Env from collections import OrderedDict @@ -33,7 +33,7 @@ class FieldNode(ASTNode): nameNodes = getParseTreeNodes(['variableInit'], node) for n in nameNodes: - self.fieldInit = ExprNode(n) + self.fieldInit = makeNodeFromExpr(n) if self.fieldInit: self.children.append(self.fieldInit) diff --git a/UnitNodes.py b/UnitNodes.py new file mode 100644 index 0000000..cac7848 --- /dev/null +++ b/UnitNodes.py @@ -0,0 +1,30 @@ +from AST import ASTNode, getParseTreeNodes, getTypeName +from Environment import Env + + + +# literals +class LiteralNode(ASTNode): + toLiType = dict({ + 'LITERALBOOL': 'bool', + 'LITERALCHAR': 'char', + 'LITERALSTRING': 'String', + 'NULL': 'null', + 'NUM': 'int', + 'ZERO': 'int' + }) + # always list all fields in the init method to show the class structure + def __init__(self, parseTree): + self.parseTree = parseTree + self.liType = toLiType.get(parseTree.children[0].name) # type of the literal + self.value = parseTree.children[0].lex # the value + self.env = None + self.children = [] + + if self.liType == 'int': + self.value = int(self.value) + if self.liType == 'LITERALBOOL': + if self.value == 'false': + self.value = False + else: + self.value = True -- GitLab