예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
 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)
예제 #15
0
 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)
예제 #16
0
 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)
예제 #17
0
 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, ";")
예제 #18
0
 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)
예제 #19
0
 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, "}")
예제 #20
0
 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, ')')
예제 #21
0
 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)
예제 #22
0
 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)
예제 #23
0
 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, '}')
예제 #24
0
 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)
예제 #25
0
 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, ";")
예제 #26
0
 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)
예제 #27
0
 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, ';')
예제 #28
0
 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)
예제 #29
0
 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)
예제 #30
0
 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)