예제 #1
0
 def parse(self):
     self.stmt = Stmt()
     self.stmt.parse()
     if TokList.checkTok('END') or TokList.checkTok('ELSE') or TokList.checkTok('ENDIF') or TokList.checkTok('ENDWHILE'):
         return
     self.stmt_seq = StmtSeq()
     self.stmt_seq.parse()
예제 #2
0
 def parse(self):
     self.term = Term()
     self.term.parse()
     if TokList.checkTok('PLUS'):
         TokList.nextToken()
         self.plusOrMinus = '+'
         self.expr = Expr()
         self.expr.parse()
     elif TokList.checkTok('MINUS'):
         TokList.nextToken()
         self.plusOrMinus = '-'
         self.expr = Expr()
         self.expr.parse()
예제 #3
0
 def parse(self):
     if TokList.checkTok('CONST'):
         self.const = Const()
         self.const.parse(TokList.getIdOrConst())
         TokList.nextToken()
     elif TokList.checkTok('ID'):
         self.id = Id()
         self.id.parse(TokList.getIdOrConst())
         TokList.nextToken()
     elif TokList.match('LEFTPARAN', 'factor'):
         self.expr = Expr.Expr()
         self.expr.parse()
         TokList.match('RIGHTPARAN', 'factor')
예제 #4
0
 def parse(self):
     if TokList.checkTok('NOT'):
         self.notStr = '!'
         TokList.nextToken()
         TokList.match('LEFTPARAN', 'cond')
         self.cond = Cond()
         self.cond.parse()
         TokList.match('RIGHTPARAN', 'cond')
         return
     self.cmpr = Cmpr()
     self.cmpr.parse()
     if TokList.checkTok('OR'):
         TokList.nextToken()
         self.cond = Cond()
         self.cond.parse()
예제 #5
0
 def parse(self):
     self.factor = Factor()
     self.factor.parse()
     if TokList.checkTok('MULT'):
         TokList.nextToken()
         self.term = Term()
         self.term.parse()
예제 #6
0
 def parse(self):
     self.leftExpr = Expr()
     self.leftExpr.parse()
     if TokList.checkTok('EQUAL'):
         self.checkValue = '='
         TokList.nextToken()
     elif TokList.checkTok('LESSTHAN'):
         self.checkValue = '<'
         TokList.nextToken()
     elif TokList.checkTok('LESSTHANEQUAL'):
         self.checkValue = '<='
         TokList.nextToken()
     else:
         print('Error: improper syntax for comparator')
         exit()
     self.rightExpr = Expr()
     self.rightExpr.parse()
예제 #7
0
 def parse(self):
     self.decl = Decl()
     self.decl.parse()
     #Checks if the decl_seq is at an end
     if TokList.checkTok('BEGIN'):
         return
     self.decl_seq = DeclSeq()
     self.decl_seq.parse()
예제 #8
0
 def parse(self):
     self.id = Id()
     #Passing in name of id to the parse function
     self.id.parse(TokList.getIdOrConst())
     TokList.nextToken()
     if TokList.checkTok('COMMA'):
         TokList.match('COMMA', 'id list')
         self.id_list = IdList()
         self.id_list.parse()
예제 #9
0
 def parse(self):
     TokList.match("PROGRAM", "program")
     self.decl_seq = DeclSeq()
     self.decl_seq.parse()
     TokList.match("BEGIN", "program")
     self.stmt_seq = StmtSeq()
     self.stmt_seq.parse()
     TokList.match("END", "program")
     #Checks for code after end of program
     if not TokList.checkTok('EOF'):
         print("ERROR: Improper code after end of program")
예제 #10
0
 def parse(self):
     if TokList.checkTok('ID'):
         self.altNo = 1
         self.s1 = Assign()
         self.s1.parse()
     elif TokList.checkTok('IF'):
         self.altNo = 2
         self.s2 = If()
         self.s2.parse()
     elif TokList.checkTok('WHILE'):
         self.altNo = 3
         self.s3 = Loop()
         self.s3.parse()
     elif TokList.checkTok('INPUT'):
         self.altNo = 4
         self.s4 = In()
         self.s4.parse()
     elif TokList.checkTok('OUTPUT'):
         self.altNo = 5
         self.s5 = Out()
         self.s5.parse()
     elif TokList.checkTok('CASE'):
         self.altNo = 6
         self.s6 = Case()
         self.s6.parse()
     else:
         #Used to briefly check for and EOF exception
         TokList.match('', 'statement')
예제 #11
0
 def parse(self):
     TokList.match('IF', 'if')
     self.cond = Cond()
     self.cond.parse()
     TokList.match('THEN', 'if')
     self.stmt_seq_then = StmtSeq.StmtSeq()
     self.stmt_seq_then.parse()
     if TokList.checkTok('ELSE'):
         TokList.nextToken()
         self.stmt_seq_else = StmtSeq.StmtSeq()
         self.stmt_seq_else.parse()
     TokList.match('ENDIF', 'if')
     TokList.match('SEMICOLON', 'if')
예제 #12
0
 def parse(self):
     if not TokList.checkTok('BAR'):
         return
     TokList.match('BAR', 'case line follow')
     self.caseLine = CaseLine.CaseLine()
     self.caseLine.parse()