From 68c2b22e22b08b038d271a87a5ddbe7af0331797 Mon Sep 17 00:00:00 2001 From: pycsham <shampuiyanchloe@gmail.com> Date: Thu, 12 Mar 2020 19:33:24 -0400 Subject: [PATCH] added checks for definite assignemnt. some minor fixes required --- LineNodes.py | 9 +++++++-- Test.py | 6 ++++-- joosc.py | 5 ++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/LineNodes.py b/LineNodes.py index 30058be..ca29384 100644 --- a/LineNodes.py +++ b/LineNodes.py @@ -31,7 +31,7 @@ def makeNodeFromAllStatement(parseTree, typeName): return WhileNode(child, typeName) elif child.name == 'variableDcl': - return VarDclNode(child, typeName) + return VarDclNode(child, typeName, True) # Creates AST node from statementExpr @@ -94,7 +94,7 @@ class BlockNode(ASTNode): # 1. variableDcl type ID # 2. variableDcl type ID ASSIGN variableInit class VarDclNode(ASTNode): - def __init__(self, parseTree, typeName): + def __init__(self, parseTree, typeName, checkAssign=False): self.parseTree = parseTree self.dclType = None self.name = None # variable name @@ -110,6 +110,11 @@ class VarDclNode(ASTNode): # Handling rule: variableInit expr self.variableInit = makeNodeFromExpr(parseTree.children[3].children[0], typeName) + # Checking for definite assignment + if checkAssign: + if not self.variableInit: + raise Exception("ERROR: local variable declaration not assigned") + self.myType = self.dclType.myType self.children.append(self.dclType) self.children.append(self.variableInit) diff --git a/Test.py b/Test.py index a08be2a..e0dcfd6 100644 --- a/Test.py +++ b/Test.py @@ -137,8 +137,10 @@ def run(testFiles): # if n == "Tests/A3/J1_accessstaticfield/Main.java": # print(n) # print(t) - - ASTs = astBuild(parseTrees) + try: + ASTs = astBuild(parseTrees) + except Exception as e: + return "AST buidling: " + e.args[0] # for (n, t) in ASTs: # print(n) diff --git a/joosc.py b/joosc.py index 6e1c969..fad79f1 100644 --- a/joosc.py +++ b/joosc.py @@ -45,7 +45,10 @@ def main(): parseTrees.append((f, tree)) # Building ASTs from all parse trees - ASTs = astBuild(parseTrees) + try: + ASTs = astBuild(parseTrees) + except Exception as e: # for definite assignemnt + return 42 try: buildEnvAndLink(ASTs) -- GitLab