def expressao_soma(self, noh): if (self.peek_token() is not None): noh1 = Noh(noh, False, 'termo') noh.addFilho(noh1) self.termo(noh1) noh2 = Noh(noh, False, 'expressao_soma\'') noh.addFilho(noh2) self.expressao_soma1(noh2)
def declaracao_lista(self, noh): if (self.peek_token() is not None): noh1 = Noh(noh, False, 'declaracao') noh.addFilho(noh1) self.declaracao(noh1) noh2 = Noh(noh, False, 'declaracao_lista\'') noh.addFilho(noh2) self.declaracao_lista1(noh2)
def expressao_simples(self, noh): if (self.peek_token() is not None): noh1 = Noh(noh, False, 'expressao_soma') noh.addFilho(noh1) self.expressao_soma(noh1) noh2 = Noh(noh, False, 'expressao_simples\'') noh.addFilho(noh2) self.expressao_simples1(noh2)
def termo(self, noh): if (self.peek_token() is not None): noh1 = Noh(noh, False, 'fator') noh.addFilho(noh1) self.fator(noh1) noh2 = Noh(noh, False, 'termo\'') noh.addFilho(noh2) self.termo1(noh2)
def param(self, noh): if (self.peek_token() is not None): noh2 = Noh(noh, False, 'tipo_especificador') noh.addFilho(noh2) self.tipo_especificador(noh2) self.match(noh, "ID") noh1 = Noh(noh, False, 'param\'') noh.addFilho(noh1) self.param1(noh1)
def declaracao1(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexeme == '('): noh1 = Noh(noh, False, 'fun_declaracao') noh.addFilho(noh1) self.fun_declaracao(noh1) else: noh1 = Noh(noh, False, 'var_declaracao') noh.addFilho(noh1) self.var_declaracao(noh1)
def declaracao_lista1(self, noh): if (self.peek_token() is not None): primeiros_declaracao = ['int', 'float', 'char', 'void', 'struct'] if (self.peek_token().lexeme in primeiros_declaracao): noh1 = Noh(noh, False, 'declaracao') noh.addFilho(noh1) self.declaracao(noh1) noh2 = Noh(noh, False, 'declaracao_lista\'') noh.addFilho(noh2) self.declaracao_lista1(noh2)
def fun_declaracao(self, noh): if (self.peek_token() is not None): self.match(noh, '(') noh1 = Noh(noh, False, 'params') noh.addFilho(noh1) self.params(noh1) self.match(noh, ')') noh2 = Noh(noh, False, 'composto_decl') noh.addFilho(noh2) self.composto_decl(noh2)
def expressao_simples1(self, noh): if (self.peek_token() is not None): primeiros_relacional = ['<', '>', '==', '!=', '<=', '>='] if (self.peek_token().lexeme in primeiros_relacional): noh1 = Noh(noh, False, 'relacional') noh.addFilho(noh1) self.relacional(noh1) noh2 = Noh(noh, False, 'expressao_soma') noh.addFilho(noh2) self.expressao_soma(noh2)
def iteracao_decl(self, noh): if (self.peek_token() is not None): self.match(noh, "while") self.match(noh, "(") noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) self.match(noh, ")") noh2 = Noh(noh, False, 'comando') noh.addFilho(noh2) self.comando(noh2)
def var1(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexemeType == self.lexemes['[']): self.match(noh, '[') noh2 = Noh(noh, False, 'expressao') noh.addFilho(noh2) self.expressao(noh2) self.match(noh, ']') noh1 = Noh(noh, False, 'var\'') noh.addFilho(noh1) self.var1(noh1)
def expressao_soma1(self, noh): if (self.peek_token() is not None): primeiros_soma = ['+', '-'] if (self.peek_token().lexeme in primeiros_soma): noh1 = Noh(noh, False, 'soma') noh.addFilho(noh1) self.soma(noh1) noh2 = Noh(noh, False, 'termo') noh.addFilho(noh2) self.termo(noh2) noh3 = Noh(noh, False, 'expressao_soma\'') noh.addFilho(noh3) self.expressao_soma1(noh3)
def termo1(self, noh): if (self.peek_token() is not None): primeiros_mult = ['*', '/'] if (self.peek_token().lexeme in primeiros_mult): noh1 = Noh(noh, False, 'mult') noh.addFilho(noh1) self.mult(noh1) noh2 = Noh(noh, False, 'fator') noh.addFilho(noh2) self.fator(noh2) noh3 = Noh(noh, False, 'termo\'') noh.addFilho(noh3) self.termo1(noh3)
def comando_lista(self, noh): if (self.peek_token() is not None): primeiros_comando = [ '{', 'if', 'while', 'return', '(', 'ID', 'CONSTANTE NUMERICA' ] if (self.peek_token().lexeme in primeiros_comando or self.peek_token().lexemeType in primeiros_comando): noh1 = Noh(noh, False, 'comando') noh.addFilho(noh1) self.comando(noh1) noh2 = Noh(noh, False, 'comando_lista') noh.addFilho(noh2) self.comando_lista(noh2)
def selecao_decl(self, noh): if (self.peek_token() is not None): self.match(noh, "if") self.match(noh, "(") noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) self.match(noh, ")") noh2 = Noh(noh, False, 'comando') noh.addFilho(noh2) self.comando(noh2) noh3 = Noh(noh, False, 'else_decl') noh.addFilho(noh3) self.else_decl(noh3)
def declaracao(self, noh): if (self.peek_token() is not None): primeiros_tipo_especificador = ['int', 'float', 'char', 'void'] if (self.peek_token().lexeme in primeiros_tipo_especificador): noh1 = Noh(noh, False, 'tipo_especificador') noh.addFilho(noh1) self.tipo_especificador(noh1) self.match(noh, "ID") noh2 = Noh(noh, False, 'declaracao\'') noh.addFilho(noh2) self.declaracao1(noh2) else: noh1 = Noh(noh, False, 'estrutura') noh.addFilho(noh1) self.estrutura(noh1)
def retorno_decl(self, noh): if (self.peek_token() is not None): self.match(noh, "return") noh2 = Noh(noh, False, 'retorno_decl\'') noh.addFilho(noh2) self.retorno_decl1(noh2) self.match(noh, ";")
def else_decl(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexeme == "else"): self.match(noh, "else") noh2 = Noh(noh, False, 'comando') noh.addFilho(noh2) self.comando(noh2)
def composto_decl(self, noh): if (self.peek_token() is not None): self.match(noh, "{") noh1 = Noh(noh, False, 'instrucoes') noh.addFilho(noh1) self.instrucoes(noh1) self.match(noh, "}")
def ativacao(self, noh): if (self.peek_token() is not None): self.match(noh, 'ID') self.match(noh, '(') noh1 = Noh(noh, False, 'args') noh.addFilho(noh1) self.args(noh1) self.match(noh, ')')
def params(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexeme == 'void'): self.match(noh, 'void') else: noh1 = Noh(noh, False, 'param_lista') noh.addFilho(noh1) self.param_lista(noh1)
def param1(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexemeType == self.lexemes['[']): self.match(noh, '[') self.match(noh, ']') noh1 = Noh(noh, False, 'param\'') noh.addFilho(noh1) self.param1(noh1)
def estrutura(self, noh): if (self.peek_token() is not None): self.match(noh, 'struct') self.match(noh, 'ID') self.match(noh, '{') noh1 = Noh(noh, False, 'atributos_declaracao') noh.addFilho(noh1) self.atributos_declaracao(noh1) self.match(noh, '}')
def param_lista(self, noh): if (self.peek_token() is not None): primeiros_tipo_especificador = ['int', 'float', 'char', 'void'] if (self.peek_token().lexeme in primeiros_tipo_especificador): noh1 = Noh(noh, False, 'param') noh.addFilho(noh1) self.param(noh1) noh2 = Noh(noh, False, 'param_lista') noh.addFilho(noh2) self.param_lista(noh2) elif (self.peek_token().lexeme == ','): self.match(noh, ',') noh1 = Noh(noh, False, 'param') noh.addFilho(noh1) self.param(noh1) noh2 = Noh(noh, False, 'param_lista') noh.addFilho(noh2) self.param_lista(noh2)
def expressao_decl(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexeme == ';'): self.match(noh, ';') else: noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) self.match(noh, ";")
def fator(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexemeType == self.lexemes['(']): self.match(noh, '(') noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) self.match(noh, ')') elif (self.peek_token().lexemeType == 'CONSTANTE NUMERICA'): self.match(noh, 'CONSTANTE NUMERICA') elif (self.peek_second_token().lexemeType == self.lexemes['(']): noh1 = Noh(noh, False, 'ativacao') noh.addFilho(noh1) self.ativacao(noh1) else: noh1 = Noh(noh, False, 'var') noh.addFilho(noh1) self.var(noh1)
def var_declaracao1(self, noh): if (self.peek_token() is not None): if (self.peek_token().lexemeType == self.lexemes['[']): self.match(noh, '[') self.match(noh, 'CONSTANTE NUMERICA') self.match(noh, ']') noh1 = Noh(noh, False, 'var_declaracao\'') noh.addFilho(noh1) self.var_declaracao1(noh1) elif (self.peek_token().lexemeType == self.lexemes['=']): self.match(noh, '=') noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) noh2 = Noh(noh, False, 'var_declaracao\'') noh.addFilho(noh2) self.var_declaracao1(noh2) else: self.match(noh, ';')
def arg_lista(self, noh): if (self.peek_token() is not None): primeiros_expressao = [ 'ID', 'CONSTANTE NUMERICA', self.lexemes['('] ] if (self.peek_token().lexemeType in primeiros_expressao): noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) noh2 = Noh(noh, False, 'arg_lista') noh.addFilho(noh2) self.arg_lista(noh2) elif (self.peek_token().lexeme == ','): self.match(noh, ',') noh1 = Noh(noh, False, 'expressao') noh.addFilho(noh1) self.expressao(noh1) noh2 = Noh(noh, False, 'arg_lista') noh.addFilho(noh2) self.arg_lista(noh2)
def instrucoes(self, noh): if (self.peek_token() is not None): primeiros_comando = [ '{', 'if', 'while', 'return', '(', 'ID', 'CONSTANTE NUMERICA' ] primeiros_local_declaracoes = ["int", "char", "float", "void"] if (self.peek_token().lexeme in primeiros_comando or self.peek_token().lexemeType in primeiros_comando): noh2 = Noh(noh, False, 'comando_lista') noh.addFilho(noh2) self.comando_lista(noh2) noh1 = Noh(noh, False, 'instrucoes') noh.addFilho(noh1) self.instrucoes(noh1) elif (self.peek_token().lexeme in primeiros_local_declaracoes): noh2 = Noh(noh, False, 'local_declaracoes') noh.addFilho(noh2) self.local_declaracoes(noh2) noh1 = Noh(noh, False, 'instrucoes') noh.addFilho(noh1) self.instrucoes(noh1)
def local_declaracoes(self, noh): if (self.peek_token() is not None): primeiros_tipo_especificador = ["int", "char", "float", "void"] if (self.peek_token().lexeme in primeiros_tipo_especificador): noh1 = Noh(noh, False, 'tipo_especificador') noh.addFilho(noh1) self.tipo_especificador(noh1) self.match(noh, 'ID') noh3 = Noh(noh, False, 'var_declaracao') noh.addFilho(noh3) self.var_declaracao(noh3) noh2 = Noh(noh, False, 'local_declaracoes') noh.addFilho(noh2) self.local_declaracoes(noh2) elif (self.peek_token().lexeme == 'struct'): noh1 = Noh(noh, False, 'estrutura') noh.addFilho(noh1) self.estrutura(noh1) noh2 = Noh(noh, False, 'local_declaracoes') noh.addFilho(noh2) self.local_declaracoes(noh2)