Beispiel #1
0
def podaCabecalho(no):

    if (len(no.child[0].child) != 1):
        variavel = []
        vet = []
        noAux = no.child[0]

        while (True):
            if (noAux.value):
                variavel.append(noAux.value)

            for son in noAux.child:
                vet.append(son)

            if (len(vet) == 0):
                break
            noAux = vet.pop(0)

        no.child[0].child = []

        tipo = []
        num = []

        for v in variavel:
            if (v != 'inteiro' and v != 'flutuante'):
                num.insert(0, v)
                # no.child[0].child.insert(0,Tree(v))
            else:
                tipo.insert(0, v)

        for i in range(len(tipo)):
            no.child[0].child.insert(0, Tree(
                tipo[i],
                [Tree(num[i])],
            ))
Beispiel #2
0
def expressoes(no):

    if (no.child.__len__() == 3 and no.child[0].child.__len__() != 3):
        no.child.append(Tree(str(no.child[1].value), []))

        var1 = encontraFolha(no.child[0])
        var2 = encontraFolha(no.child[2])

        no.child.pop(0)
        no.child.pop(0)
        no.child.pop(0)

        no.child[0].child.append(Tree(str(var1.value)))
        no.child[0].child.append(Tree(str(var2.value)))

    else:
        no.child.append(Tree(str(no.child[1].value), []))

        var2 = encontraFolha(no.child[2])
        var1 = no.child.pop(0)
        no.child.pop(0)
        no.child.pop(0)

        no.child[0].child.append(var1)
        no.child[0].child.append(Tree(str(var2.value)))
Beispiel #3
0
def p_lista_declaracoes(p):
    '''
    lista_declaracoes :  declaracao
                        | lista_declaracoes declaracao
    '''
    if len(p) == 3:
        p[0] = Tree('lista_declaracoes', [p[1], p[2]])
    elif len(p) == 2:
        p[0] = Tree('lista_declaracoes', [p[1]])
Beispiel #4
0
def p_expressao_multiplicativa(p):
    '''
    expressao_multiplicativa : expressao_unaria
                    | expressao_multiplicativa operador_multiplicacao expressao_unaria
    '''
    if len(p) == 2:
        p[0] = Tree('expressao_multiplicativa', [p[1]])
    elif len(p) == 4:
        p[0] = Tree('expressao_multiplicativa', [p[1], p[2], p[3]])
Beispiel #5
0
def p_expressao_simples(p):
    '''
    expressao_simples : expressao_aditiva
                        | expressao_simples operador_relacional expressao_aditiva
    '''
    if len(p) == 2:
        p[0] = Tree('expressao_simples', [p[1]])
    elif len(p) == 4:
        p[0] = Tree('expressao_simples', [p[1], p[2], p[3]])
Beispiel #6
0
def p_lista_variaveis(p):
    '''
    lista_variaveis : lista_variaveis VIRGULA var
                    | var
    '''
    if len(p) == 4:
        p[0] = Tree('lista_variaveis', [p[1], p[3]])
    elif len(p) == 2:
        p[0] = Tree('lista_variaveis', [p[1]])
Beispiel #7
0
def p_se(p):
    '''
    se : SE expressao ENTAO corpo FIM
        | SE expressao ENTAO corpo SENAO corpo FIM
    '''
    if len(p) == 6:
        p[0] = Tree('se', [p[2], p[4]])
    elif len(p) == 8:
        p[0] = Tree('se', [p[2], p[4], p[6]])
Beispiel #8
0
def p_expressao_logica(p):
    '''
    expressao_logica : expressao_simples
                        | expressao_logica operador_logico expressao_simples
    '''
    if len(p) == 2:
        p[0] = Tree('expressao_logica', [p[1]])
    elif len(p) == 4:
        p[0] = Tree('expressao_logica', [p[1], p[2], p[3]])
Beispiel #9
0
def p_corpo(p):
    '''
    corpo : corpo acao
            | vazio
    '''
    if len(p) == 3:
        p[0] = Tree('corpo', [p[1], p[2]])
    elif len(p) == 2:
        p[0] = Tree('corpo', [p[1]])
Beispiel #10
0
def p_indice(p):
    '''
    indice : indice ABRE_COL expressao FECHA_COL
            | ABRE_COL expressao FECHA_COL
    '''
    if len(p) == 5:
        p[0] = Tree('indice', [p[1], p[3]])
    elif len(p) == 4:
        p[0] = Tree('indice', [p[2]])
Beispiel #11
0
def p_parametro(p):
    '''
    parametro : tipo DOIS_PONTOS ID
                | parametro ABRE_COL FECHA_COL
    '''
    if (p[2] == ':'):
        p[0] = Tree('parametro', [p[1]], p[3])
    else:
        p[0] = Tree('parametro', [p[1]])
Beispiel #12
0
def p_declaracao_funcao(p):
    '''
    declaracao_funcao : tipo cabecalho
                        | cabecalho
    '''
    if len(p) == 3:
        p[0] = Tree('declaracao_funcao', [p[1], p[2]])
    elif len(p) == 2:
        p[0] = Tree('declaracao_funcao', [p[1]])
Beispiel #13
0
def p_var(p):
    '''
    var : ID
        | ID indice
    '''
    if len(p) == 2:
        p[0] = Tree('var', [], p[1])
    elif len(p) == 3:
        p[0] = Tree('var', [p[2]], p[1])
Beispiel #14
0
def p_expressao_aditiva(p):
    '''
    expressao_aditiva : expressao_multiplicativa
                        | expressao_aditiva operador_soma expressao_multiplicativa
    '''
    if len(p) == 2:
        p[0] = Tree('expressao_aditiva', [p[1]])
    elif len(p) == 4:
        p[0] = Tree('expressao_aditiva', [p[1], p[2], p[3]])
Beispiel #15
0
def p_lista_parametros(p):
    '''
    lista_parametros : lista_parametros VIRGULA parametro
                        | parametro
                        | vazio
    '''
    if len(p) == 4:
        p[0] = Tree('lista_parametros', [p[1], p[3]])
    elif len(p) == 2:
        p[0] = Tree('lista_parametros', [p[1]])
Beispiel #16
0
def p_lista_argumentos(p):
    '''
    lista_argumentos : lista_argumentos VIRGULA expressao
                       | expressao
                       | vazio
    '''
    if len(p) == 4:
        p[0] = Tree('lista_argumentos', [p[1], p[3]])
    elif len(p) == 2:
        p[0] = Tree('lista_argumentos', [p[1]])
Beispiel #17
0
def p_expressao_unaria(p):
    '''
    expressao_unaria : fator
                    | operador_soma fator
                    | operador_negacao fator
    '''
    if len(p) == 2:
        p[0] = Tree('expressao_unaria', [p[1]])
    elif len(p) == 3:
        p[0] = Tree('expressao_unaria', [p[1], p[2]])
Beispiel #18
0
def p_fator(p):
    '''
    fator : ABRE_PAR expressao FECHA_PAR
          | var
          | chamada_funcao
          | numero
    '''
    if len(p) == 4:
        p[0] = Tree('fator', [p[2]])
    elif len(p) == 2:
        p[0] = Tree('fator', [p[1]])
Beispiel #19
0
def p_declaracao(p):
    '''
        declaracao : declaracao_variaveis
                | inicializacao_variaveis
                | declaracao_funcao
    '''
    p[0] = Tree('declaracao', [p[1]])
Beispiel #20
0
def p_numero(p):
    '''
    numero : NUM_INTEIRO
            | NUM_FLUTUANTE
            | NUM_NOTACAO_CIENTIFICA
    '''
    p[0] = Tree('numero', [], p[1])
Beispiel #21
0
def podaRetorna(no):
    var = encontraFolha(no)

    if (var.type == 'numero'):
        no.child = []
        no.child.append(Tree(str(var.value)))
    else:
        no.child = []
        no.child.append(var)
Beispiel #22
0
def podaAcao(no):

    if (no.child[0].type == 'escreva' or no.child[0].type == 'leia'):
        var = encontraFolha(no.child[0])
        no.child[0].child[0] = Tree(var.value)

    elif (no.child[0].type != 'retorna'):
        var = encontraFolha(no.child[0])
        no.child[0] = var
Beispiel #23
0
def p_operador_relacional(p):
    '''
    operador_relacional : MENOR
                        | MAIOR
                        | IGUALDADE
                        | DIFERENCA
                        | MENOR_IGUAL
                        | MAIOR_IGUAL
    '''
    p[0] = Tree('operador_relacional', [], p[1])
Beispiel #24
0
def podaDeclaracao_variaveis(no):
    var = pegaVariavel(no)

    qtdFilhos = no.child.__len__()

    if (no.child[1].child[0].child.__len__() != 0
            and no.child[1].child[0].type != 'lista_variaveis'):

        filho = arrayFilho(var.__len__(), var)

        no.child[0] = Tree(var[0])
        no.child[1] = Tree(var[1], filho)

    else:
        for i in range(var.__len__()):
            if (i < qtdFilhos):
                no.child[i] = Tree(str(var[i]))
            else:
                no.child.append(Tree(str(var[i])))
Beispiel #25
0
def p_acao(p):
    '''
    acao : expressao
            | declaracao_variaveis
            | se
            | repita
            | leia
            | escreva
            | retorna
            | error

    '''
    p[0] = Tree('acao', [p[1]])
Beispiel #26
0
def p_tipo(p):
    '''
    tipo :  INTEIRO
            | FLUTUANTE
    '''
    p[0] = Tree('tipo', [], p[1])
Beispiel #27
0
def p_operador_logico(p):
    '''
    operador_logico : E_LOGICO
                | OU_LOGICO
    '''
    p[0] = Tree('operador_logico', [], p[1])
Beispiel #28
0
def p_chamada_funcao(p):
    '''
    chamada_funcao : ID ABRE_PAR lista_argumentos FECHA_PAR
    '''
    p[0] = Tree('chamada_funcao', [p[3]], p[1])
Beispiel #29
0
def p_inicializacao_variaveis(p):
    '''
    inicializacao_variaveis : atribuicao
    '''
    p[0] = Tree('inicializacao_variaveis', [p[1]])
Beispiel #30
0
def p_declaracao_variaveis(p):
    '''
    declaracao_variaveis : tipo DOIS_PONTOS lista_variaveis
    '''
    p[0] = Tree('declaracao_variaveis', [p[1], p[3]])