Ejemplo n.º 1
0
def p_operador_negacao(p):
    """operador_negacao : NEGACAO"""
    pai = MyNode(name='operador_negacao', type='OPERADOR_NEGACAO')
    nao = MyNode(name='NEGACAO', type='NEGACAO', parent=pai)
    nao_simbolo = MyNode(name=p[1], type='SIMBOLO', parent=nao)

    p[1] = nao
Ejemplo n.º 2
0
def p_fator(p):
    """fator : ABRE_PARENTESE expressao FECHA_PARENTESE
            | var
            | chamada_funcao
            | numero
    """
    pai = MyNode(name='fator', type="FATOR")
    p[0] = pai
    if len(p) > 2:
        abre_parentese = MyNode(name='ABRE_PARENTESE',
                                type='ABRE_PARENTESE',
                                parent=pai)
        abre_parentese_simbolo = MyNode(name='(',
                                        type='SIMBOLO',
                                        parent=abre_parentese)
        p[1] = abre_parentese

        p[2].parent = pai

        fecha_parentese = MyNode(name='FECHA_PARENTESE',
                                 type='FECHA_PARENTESE',
                                 parent=pai)
        fecha_parentese_simbolo = MyNode(name=')',
                                         type='SIMBOLO',
                                         parent=fecha_parentese)
        p[3] = fecha_parentese
    else:
        p[1].parent = pai
Ejemplo n.º 3
0
def resolve_expressao_aditiva(exp, tipo_var, id_atrib):
    filho = exp.children[0]
    if filho.label == 'expressao_multiplicativa':
        return resolve_expressao_multiplicativa(filho, tipo_var, id_atrib)
    else:
        filho_esq = exp.children[0]
        filho_dir = exp.children[2]
        a1 = resolve_expressao_aditiva(filho_esq, tipo_var, id_atrib)
        a3 = resolve_expressao_multiplicativa(filho_dir, tipo_var, id_atrib)

        tipo_a1 = a1.type
        tipo_a3 = a3.type

        if tipo_a3 == tipo_a1:
            tipo_operacao = tipo_a3
        else:
            tipo_operacao = "FLUTUANTE"

        nome_operador = exp.children[1].children[0].label
        if nome_operador == "MAIS":
            node_adicao = MyNode(name="+", type=tipo_operacao)
        elif nome_operador == "MENOS":
            node_adicao = MyNode(name="-", type=tipo_operacao)


        a1.parent = node_adicao
        a3.parent = node_adicao
        node_adicao.id = "+-" + tipo_operacao
        return node_adicao
Ejemplo n.º 4
0
def p_operador_negacao(p):
    """operador_negacao : NEGACAO"""

    if p[1] == "!":
        filho = MyNode(name='NEGACAO', type='NEGACAO')
        negacao_lexema = MyNode(name=p[1], type='SIMBOLO', parent=filho)
        p[0] = MyNode(name='operador_negacao',
                      type='OPERADOR_NEGACAO', children=[filho])
Ejemplo n.º 5
0
def p_operador_negacao(p):
    """operador_negacao : NAO"""

    if p[1] == "!":
        child = MyNode(name="NAO", type="NAO")
        negacao_lexema = MyNode(name=p[1], line=p.lineno(1), type="SIMBOLO", parent=child)
        p[0] = MyNode(
            name="operador_negacao", type="OPERADOR_NEGACAO", children=[child]
        )
Ejemplo n.º 6
0
def p_cabecalho(p):
    """cabecalho : ID ABRE_PARENTESE lista_parametros FECHA_PARENTESE corpo FIM"""

    father = MyNode(name="cabecalho", type="CABECALHO")
    p[0] = father

    child1 = MyNode(name="ID", type="ID", parent=father)
    child_id = MyNode(name=p[1], line=p.lineno(1), type="ID", parent=child1)
    p[1] = child1

    child2 = MyNode(name="ABRE_PARENTESE", type="ABRE_PARENTESE", parent=father)
    child_sym2 = MyNode(name="(", type="SIMBOLO", parent=child2)
    p[2] = child2

    p[3].parent = father

    child4 = MyNode(name="FECHA_PARENTESE", type="FECHA_PARENTESE", parent=father)
    child_sym4 = MyNode(name=")", type="SIMBOLO", parent=child4)
    p[4] = child4

    p[5].parent = father

    child6 = MyNode(name="FIM", type="FIM", parent=father)
    child_id = MyNode(name="fim", type="FIM", parent=child6)
    p[6] = child6
Ejemplo n.º 7
0
def p_indice(p):
    """indice : indice ABRE_COLCHETE expressao FECHA_COLCHETE
    | ABRE_COLCHETE expressao FECHA_COLCHETE
    """
    father = MyNode(name="indice", type="INDICE")
    p[0] = father
    if len(p) == 5:
        p[1].parent = father

        child2 = MyNode(name="abre_colchete", type="ABRE_COLCHETE", parent=father)
        child_sym2 = MyNode(name=p[2], line=p.lineno(2), type="SIMBOLO", parent=child2)
        p[2] = child2

        p[3].parent = father

        child4 = MyNode(name="fecha_colchete", type="FECHA_COLCHETE", parent=father)
        child_sym4 = MyNode(name=p[4], line=p.lineno(4), type="SIMBOLO", parent=child4)
        p[4] = child4
    else:
        child1 = MyNode(name="abre_colchete", type="ABRE_COLCHETE", parent=father)
        child_sym1 = MyNode(name=p[1], line=p.lineno(1), type="SIMBOLO", parent=child1)
        p[1] = child1

        p[2].parent = father

        child3 = MyNode(name="fecha_colchete", type="FECHA_COLCHETE", parent=father)
        child_sym3 = MyNode(name=p[3], line=p.lineno(3), type="SIMBOLO", parent=child3)
        p[3] = child3
Ejemplo n.º 8
0
def main(search_name):

    ## Searches for the node named search_name in the instantiated MyTree object using
    ## MyTree function find_node.  Prints information about the node if found,
    ## as well as names of nodes visited during the search.

    ## Instantiate nodes
    e1 = MyNode("E1", [])
    find_me = MyNode("FindMe", [])
    c1 = MyNode("C1", [])
    d1 = MyNode("D1", [e1])
    b1 = MyNode("B1", [find_me])
    b2 = MyNode("B2", [c1])
    a1 = MyNode("A1", [d1])
    a2 = MyNode("A2", [b1, b2])
    start = MyNode("Start", [a1, a2])

    ## Instatiate tree
    tree_nodes = [start, a1, a2, d1, b1, b2, e1, find_me, c1]
    my_tree = MyTree(start, tree_nodes)

    ## Find the node named search_name
    target_node = my_tree.find_node(search_name)

    ## If found, return node.  Otherwise return null.
    ## In either case, print result.
    if target_node:
        print("\nThe node named " + search_name + " was found.")
        print(target_node)
    else:
        print("\nNo node named " + search_name + " was found.")
Ejemplo n.º 9
0
def p_parametro(p):
    """parametro : tipo DOIS_PONTOS ID
                | parametro ABRE_COLCHETE FECHA_COLCHETE
    """
    pai = MyNode(name='parametro', type='PARAMETRO')
    p[0] = pai
    p[1].parent = pai
    if p[2] == ':':
        dois_pontos = MyNode(name="dois_pontos",
                             type='DOIS_PONTOS',
                             parent=pai)
        dois_pontos_simbolo = MyNode(name=":",
                                     type='SIMBOLO',
                                     parent=dois_pontos)
        p[2] = dois_pontos

        node_id = MyNode(name='id', type='ID', parent=pai)
        filho_id = MyNode(name=p[3], type='ID', parent=node_id)
        p[3] = dois_pontos
    else:
        abre_colchete = MyNode(name='abre_colchete',
                               type='ABRE_COLCHETE',
                               parent=pai)
        abre_colchete_simbolo = MyNode(name='[',
                                       type='SIMBOLO',
                                       parent=abre_colchete)
        p[2] = abre_colchete

        fecha_colchete = MyNode(name='fecha_colchete',
                                type='FECHA_COLCHETE',
                                parent=pai)
        fecha_colchete_simbolo = MyNode(name=']',
                                        type='SIMBOLO',
                                        parent=fecha_colchete)
        p[2] = fecha_colchete
Ejemplo n.º 10
0
def p_indice(p):
    """indice : indice ABRE_COLCHETE expressao FECHA_COLCHETE
                | ABRE_COLCHETE expressao FECHA_COLCHETE
    """
    pai = MyNode(name='indice', type='INDICE')
    p[0] = pai
    if len(p) == 5:
        p[1].parent = pai   # indice

        filho2 = MyNode(name='abre_colchete', type='ABRE_COLCHETE', parent=pai)
        filho_sym2 = MyNode(name=p[2], type='SIMBOLO', parent=filho2)
        p[2] = filho2

        p[3].parent = pai  # expressao

        filho4 = MyNode(name='fecha_colchete', type='FECHA_COLCHETE', parent=pai)
        filho_sym4 = MyNode(name=p[4], type='SIMBOLO', parent=filho4)
        p[4] = filho4
    else:
        filho1 = MyNode(name='abre_colchete', type='ABRE_COLCHETE', parent=pai)
        filho_sym1 = MyNode(name=p[1], type='SIMBOLO', parent=filho1)
        p[1] = filho1

        p[2].parent = pai  # expressao

        filho3 = MyNode(name='fecha_colchete', type='FECHA_COLCHETE', parent=pai)
        filho_sym3 = MyNode(name=p[3], type='SIMBOLO', parent=filho3)
        p[3] = filho3
Ejemplo n.º 11
0
def p_cabecalho(p):
    """cabecalho : ID ABRE_PARENTESE lista_parametros FECHA_PARENTESE corpo FIM"""

    pai = MyNode(name='cabecalho', type='CABECALHO')
    p[0] = pai

    filho1 = MyNode(name='ID', type='ID', parent=pai)
    filho_id = MyNode(name=p[1], type='ID', parent=filho1)
    p[1] = filho1

    filho2 = MyNode(name='ABRE_PARENTESE', type='ABRE_PARENTESE', parent=pai)
    filho_sym2 = MyNode(name='(', type='SIMBOLO', parent=filho2)
    p[2] = filho2

    p[3].parent = pai  # lista_parametros

    filho4 = MyNode(name='FECHA_PARENTESE', type='FECHA_PARENTESE', parent=pai)
    filho_sym4 = MyNode(name=')', type='SIMBOLO', parent=filho4)
    p[4] = filho4

    p[5].parent = pai  # corpo

    filho6 = MyNode(name='FIM', type='FIM', parent=pai)
    filho_id = MyNode(name='fim', type='FIM', parent=filho6)
    p[6] = filho6
Ejemplo n.º 12
0
def p_cabecalho(p):
    """cabecalho : ID ABRE_PARENTESE lista_parametros FECHA_PARENTESE corpo FIM"""
    pai = MyNode(name='cabecalho', type='CABECALHO')
    p[0] = pai

    node_id = MyNode(name="ID", type='ID', parent=pai)
    node_id_simbolo = MyNode(name=p[1], type='ID', parent=node_id)
    p[1] = node_id

    abre_parentese = MyNode(name='ABRE_PARENTESE',
                            type='ABRE_PARENTESE',
                            parent=pai)
    abre_parentese_simbolo = MyNode(name='(',
                                    type='SIMBOLO',
                                    parent=abre_parentese)
    p[2] = abre_parentese

    p[3].parent = pai

    fecha_parentese = MyNode(name='FECHA_PARENTESE',
                             type='FECHA_PARENTESE',
                             parent=pai)
    fecha_parentese_simbolo = MyNode(name=")",
                                     type='SIMBOLO',
                                     parent=fecha_parentese)
    p[4] = fecha_parentese

    p[5].parent = pai

    fim = MyNode(name='FIM', type='FIM', parent=pai)
    fim_simbolo = MyNode(name='fim', type='FIM', parent=fim)
    p[6] = fim
Ejemplo n.º 13
0
def p_declaracao_variaveis(p):
    """declaracao_variaveis : tipo DOIS_PONTOS lista_variaveis"""
    pai = MyNode(name='declaracao_variaveis', type='DECLARACAO_VARIAVEIS')
    p[0] = pai
    p[1].parent = pai

    dois_pontos = MyNode(name='dois_pontos', type='DOIS_PONTOS', parent=pai)
    dois_pontos_simbolo = MyNode(name=p[2], type='SIMBOLO', parent=dois_pontos)
    p[2] = dois_pontos

    p[3].parent = pai
Ejemplo n.º 14
0
def p_atribuicao(p):
    """atribuicao : var ATRIBUICAO expressao"""
    pai = MyNode(name='atribuicao', type='ATRIBUICAO')
    p[0] = pai

    p[1].parent = pai

    atribuicao = MyNode(name='ATRIBUICAO', type='ATRIBUICAO', parent=pai)
    atribuicao_simbolo = MyNode(name=':=', type='SIMBOLO', parent=atribuicao)
    p[2] = atribuicao

    p[3].parent = pai
Ejemplo n.º 15
0
def p_var(p):
    """var : ID
            | ID indice
    """

    pai = MyNode(name='var', type='VAR')
    p[0] = pai
    filho = MyNode(name='ID', type='ID', parent=pai)
    filho_id = MyNode(name=p[1], type='ID', parent=filho)
    p[1] = filho
    if len(p) > 2:
        p[2].parent = pai
Ejemplo n.º 16
0
def p_var(p):
    """var : ID
    | ID indice
    """

    father = MyNode(name="var", type="VAR")
    p[0] = father
    child = MyNode(name="ID", type="ID", parent=father)
    child_id = MyNode(name=p[1], line=p.lineno(1), type="ID", parent=child)
    p[1] = child
    if len(p) > 2:
        p[2].parent = father
Ejemplo n.º 17
0
def p_var(p):
    """var : ID 
            | ID indice"""
    pai = MyNode(name='var', type='VAR')
    p[0] = pai

    node_id = MyNode(name='ID', type='ID', parent=pai)
    node_id_simbolo = MyNode(name=p[1], type='SIMBOLO', parent=node_id)
    p[1] = node_id

    if len(p) > 2:
        p[2].parent = pai
Ejemplo n.º 18
0
def p_declaracao_variaveis(p):
    """declaracao_variaveis : tipo DOIS_PONTOS lista_variaveis"""

    father = MyNode(name="declaracao_variaveis", type="DECLARACAO_VARIAVEIS")
    p[0] = father

    p[1].parent = father

    child = MyNode(name="dois_pontos", type="DOIS_PONTOS", parent=father)
    child_sym = MyNode(name=p[2], line=p.lineno(2), type="SIMBOLO", parent=child)
    p[2] = child

    p[3].parent = father
Ejemplo n.º 19
0
def p_declaracao_variaveis(p):
    """declaracao_variaveis : tipo DOIS_PONTOS lista_variaveis"""

    pai = MyNode(name='declaracao_variaveis', type='DECLARACAO_VARIAVEIS')
    p[0] = pai

    p[1].parent = pai

    filho = MyNode(name='dois_pontos', type='DOIS_PONTOS', parent=pai)
    filho_sym = MyNode(name=p[2], type='SIMBOLO', parent=filho)
    p[2] = filho

    p[3].parent = pai
Ejemplo n.º 20
0
def p_atribuicao(p):
    """atribuicao : var ATRIBUICAO expressao"""

    pai = MyNode(name='atribuicao', type='ATRIBUICAO')
    p[0] = pai

    p[1].parent = pai

    filho2 = MyNode(name='ATRIBUICAO', type='ATRIBUICAO', parent=pai)
    filho_sym2 = MyNode(name=':=', type='SIMBOLO', parent=filho2)
    p[2] = filho2

    p[3].parent = pai
Ejemplo n.º 21
0
def p_lista_variaveis(p):
    """lista_variaveis : lista_variaveis VIRGULA var
                        | var
    """
    pai = MyNode(name='lista_variaveis', type='LISTA_VARIAVEIS')
    p[0] = pai
    if len(p) > 2:
        p[1].parent = pai
        filho = MyNode(name='virgula', type='VIRGULA', parent=pai)
        filho_sym = MyNode(name=',', type='SIMBOLO', parent=filho)
        p[3].parent = pai
    else:
       p[1].parent = pai
Ejemplo n.º 22
0
def p_operador_multiplicacao(p):
    """operador_multiplicacao : MULTIPLICACAO
                            | DIVISAO
    """
    pai = MyNode(name='operador_multiplicacao', type='OPERADOR_MULTIPLICACAO')
    p[0] = pai

    if (p[1] == '*'):
        node = MyNode(name='MULTIPLICACAO', type='MULTIPLICACAO', parent=pai)
    else:
        node = MyNode(name='DIVISAO', type='DIVISAO', parent=pai)
    node_simbolo = MyNode(name=p[1], type='SIMBOLO', parent=node)
    p[1] = node
Ejemplo n.º 23
0
def p_lista_variaveis(p):
    """lista_variaveis : lista_variaveis VIRGULA var
    | var
    """
    father = MyNode(name="lista_variaveis", type="LISTA_VARIAVEIS")
    p[0] = father
    if len(p) > 2:
        p[1].parent = father
        child = MyNode(name="virgula", type="VIRGULA", parent=father)
        child_sym = MyNode(name=",", type="SIMBOLO", parent=child)
        p[3].parent = father
    else:
        p[1].parent = father
Ejemplo n.º 24
0
def p_atribuicao(p):
    """atribuicao : var ATRIBUICAO expressao"""

    father = MyNode(name="atribuicao", type="ATRIBUICAO")
    p[0] = father

    p[1].parent = father

    child2 = MyNode(name="ATRIBUICAO", type="ATRIBUICAO", parent=father)
    child_sym2 = MyNode(name=":=", type="SIMBOLO", parent=child2)
    p[2] = child2

    p[3].parent = father
Ejemplo n.º 25
0
def p_operador_logico(p):
    """operador_logico : E_LOGICO
                    | OU_LOGICO
    """
    pai = MyNode(name='operador_logico', type='OPERADOR_LOGICO')
    p[0] = pai

    if p[1] == "E":
        node = MyNode(name='E_LOGICO', type='E_LOGICO', parent=pai)
    else:
        node = MyNode(name="OU_LOGICO", type='OU_LOGICO', parent=pai)

    node_simbolo = MyNode(name=p[1], type='SIMBOLO', parent=node)
    p[1] = node
Ejemplo n.º 26
0
def p_lista_variaveis(p):
    """lista_variaveis : lista_variaveis VIRGULA var
                        | var
    """

    pai = MyNode(name='lista_variaveis', type='LISTA_VARIAVEIS')
    p[0] = pai
    p[1].parent = pai
    if len(p) > 2:
        virgula = MyNode(name='virgula', type='VIRGULA', parent=pai)
        virgula_simbolo = MyNode(name=',', type='simbolo', parent=virgula)
        p[2] = virgula

        p[3].parent = pai
Ejemplo n.º 27
0
def p_lista_parametros(p):
    """lista_parametros : lista_parametros VIRGULA parametro
                    | parametro
                    | vazio
    """

    pai = MyNode(name='lista_parametros', type='LISTA_PARAMETROS')
    p[0] = pai
    p[1].parent = pai

    if len(p) > 2:
        filho2 = MyNode(name='virgula', type='VIRGULA', parent=pai)
        filho_sym2 = MyNode(name=',', type='SIMBOLO', parent=filho2)
        p[2] = filho2
        p[3].parent = pai
Ejemplo n.º 28
0
def p_lista_parametros(p):
    """lista_parametros : lista_parametros VIRGULA parametro
    | parametro
    | vazio
    """

    father = MyNode(name="lista_parametros", type="LISTA_PARAMETROS")
    p[0] = father
    p[1].parent = father

    if len(p) > 2:
        child2 = MyNode(name="virgula", type="VIRGULA", parent=father)
        child_sym2 = MyNode(name=",", type="SIMBOLO", parent=child2)
        p[2] = child2
        p[3].parent = father
Ejemplo n.º 29
0
def p_operador_soma(p):
    """operador_soma : MAIS
                    | MENOS
    """
    pai = MyNode(name='operador_soma', type='OPERADOR_SOMA')
    p[0] = pai

    if p[1] == "+":
        mais = MyNode(name='MAIS', type='MAIS', parent=pai)
        mais_simbolo = MyNode(name='+', type='SIMBOLO', parent=mais)
        p[1] = mais
    else:
        menos = MyNode(name='MENOS', type='MENOS', parent=pai)
        menos_simbolo = MyNode(name='-', type='SIMBOLO', parent=menos)
        p[1] = menos
Ejemplo n.º 30
0
def p_tipo(p):
    """tipo : INTEIRO
        | FLUTUANTE
    """

    pai = MyNode(name='tipo', type='TIPO')
    p[0] = pai

    if p[1] == "inteiro":
        filho1 = MyNode(name='INTEIRO', type='INTEIRO', parent=pai)
        filho_sym = MyNode(name=p[1], type=p[1].upper(), parent=filho1)
        p[1] = filho1
    else:
        filho1 = MyNode(name='FLUTUANTE', type='FLUTUANTE', parent=pai)
        filho_sym = MyNode(name=p[1], type=p[1].upper(), parent=filho1)