def stmtlist(self): """ parse a bunch of statements """ self.dbg_msg(" STMTLIST ") stlist = StmtList() while (not self.lex.end_of_tokens()): self.dbg_msg("STMTLIST => STMT") ptok = self.peek() if (ptok.kind == Token.END): break if (not self.inside_if and (ptok.kind == Token.ELSE or ptok.kind == Token.ELSEIF)): break st = self.stmt() stlist.append(st) return stlist
def parse(self): """ parser routine """ self.ast = StmtList() while (not self.lex.end_of_tokens()): self.dbg_msg("AST length = %d" % len(self.ast)) if (self.lex.peek().kind == Token.DEF): self.dbg_msg("parsing for function") ## save function in a global table. func = self.function() self.warn_function_overrides(func.name) self.function_map[func.name] = func else: self.dbg_msg("parsing for stmt") st = self.stmt() if (not self.parsing_function): self.ast.append(st) return self.ast
def stmtlist(self, pass_in_ATexpr=None): """ parse a bunch of statements """ self.dbg_msg(" STMTLIST ") stlist = StmtList() while (not self.lex.end_of_tokens()): self.dbg_msg("STMTLIST => STMT") ptok = self.peek() self.dbg_msg("STMTLIST " + str(ptok)) if (self.debug): print("peek @ ", str(ptok)) if (ptok.kind == EzhilToken.END): self.dbg_msg("End token found") break elif (ptok.kind == EzhilToken.DOWHILE): if (self.debug): print("DOWHILE token found") break elif (self.inside_if and (ptok.kind == EzhilToken.ELSE or ptok.kind == EzhilToken.ATRATEOF or ptok.kind == EzhilToken.CASE or ptok.kind == EzhilToken.OTHERWISE)): break st = self.stmt(pass_in_ATexpr) pass_in_ATexpr = None stlist.append(st) return stlist