コード例 #1
0
def p_asignaciones(t):
    '''ASIGNACIONES :   INCRE_DECRE PUNTOCOMA
                        | ID OP_ASIGNACION EXPRESION PUNTOCOMA
                        | ID CORCHETES OP_ASIGNACION EXPRESION PUNTOCOMA'''

    global grammarList
    if len(t) == 6:
        #asignacion de valor a arreglo;
        a = 3
        t[0] = AsignationArray(t[1], t[2], t[4], t.lineno(1), t.lexpos(1))
        grammarList.append(
            g.nodeGramatical(
                'ASIGNACIONES  -> ID CORCHETES OP_ASIGNACION EXPRESION PUNTOCOMA',
                f'ASIGNACIONES.val= AsignationArray(t[1], t[2], t[4], t.lineno(1), t.lexpos(1))'
            ))
    elif len(t) == 5:  #ID OP_ASIGNACION EXPRESION PUNTOCOMA
        t[0] = Asignation(t[1], t[2], t[3], t.lineno(1), t.lexpos(3))
        grammarList.append(
            g.nodeGramatical(
                'ASIGNACIONES  -> ID OP_ASIGNACION EXPRESION PUNTOCOMA  ',
                f'ASIGNACIONES.val= Asignation(t[1], t[2], t[3], t.lineno(1), t.lexpos(3))'
            ))
    elif len(t) == 3:  #incremento o decremento
        t[0] = t[1]
        t[0] = Asignation(t[1].id, '=', t[1], t.lineno(2), t.lexpos(2))
コード例 #2
0
def p_elseIf_(t):
    '''
    ELSE_IF_ :   ELSE_IF
                | ELSE_
                | ELSE_IF ELSE_
                | 
    '''
    global grammarList
    if len(t) == 2:
        t[1] = flatten(t[1])
        t[0] = t[1]
        grammarList.append(
            g.nodeGramatical('ELSE_IF_  -> ELSE_IF \n | ELSE_',
                             f't[1] = flatten(t[1]) \n ELSE_IF_.val = t[1]'))
    elif len(t) == 3:
        t[1].append(t[2])
        t[1] = flatten(t[1])
        t[0] = t[1]
        grammarList.append(
            g.nodeGramatical(
                'ELSE_IF_  -> ELSE_IF ELSE_',
                f't[1].append(t[2]) \n t[1] = flatten(t[1]) \n ELSE_IF_.val = t[1]'
            ))
    else:
        t[0] = []
        grammarList.append(
            g.nodeGramatical('ELSE_IF_  -> ', f'ELSE_IF_.val = []'))
コード例 #3
0
def p_declaracionStructInterna(t):
    '''DECLARACION_STRUCT_INTERNA : STRUCT ID ASISTRCUT PUNTOCOMA
                                    | ID ASISTRCUT PUNTOCOMA
                                    | ASISTRCUT IGUAL EXPRESION PUNTOCOMA                                                
                                    | ASISTRCUT LISTA_PUNTOS OP_ASIGNACION EXPRESION PUNTOCOMA
    '''
    global grammarList
    if len(t) == 5 and t[1] == 'struct':
        #STRUCT ID ASISTRCUT PUNTOCOMA
        t[0] = DeclaStructIntr(t[2], t[3], t.lineno(1), t.lexpos(1))
        grammarList.append(
            g.nodeGramatical(
                'DECLARACION_STRUCT_INTERNA  -> STRUCT ID ASISTRCUT PUNTOCOMA ',
                f'DECLARACION_STRUCT_INTERNA.val= AsignationStruct(t[2], t[3], t.lineno(1), t.lexpos(1))'
            ))
    elif len(t) == 6:
        #ASISTRCUT ID IGUAL EXPRESION PUNTOCOMA
        a = 3
        t[0] = AsignationStructExpre(t[1], t[2], t[4], t.lineno(5),
                                     t.lexpos(5))
        grammarList.append(
            g.nodeGramatical(
                'DECLARACION_STRUCT_INTERNA  -> ASISTRCUT LISTA_PUNTOS OP_ASIGNACION EXPRESION PUNTOCOMA ',
                f'DECLARACION_STRUCT_INTERNA.val= AsignationStructExpre(t[1], t[2], t[4], t.lineno(6), t.lexpos(6))'
            ))
コード例 #4
0
def p_instrucciones(t):
    '''INSTRUCCIONES    : PRINT PARIZQ EXPRESION PARDER PUNTOCOMA
                        | IF PARIZQ EXPRESION PARDER GOTO LABEL PUNTOCOMA
                        | UNSET PARIZQ ID PARDER PUNTOCOMA
                        | EXIT PUNTOCOMA
                        | GOTO LABEL PUNTOCOMA'''

    global contador, conNode, fgraph, senteList, input_, grammarList, lisInstructions
    if (t[1] == 'print'):
        t[0] = Print_(t[3], t.lineno(2), find_column(input_, t.slice[2]))
        grammarList.append(
            g.nodeGramatical('INSTRUCCIONES -> PRINT ( EXPRESION ) PUNTOCOMA',
                             f'INSTRUCCIONES.val = Print_(EXPRESION.val'))
    elif (t[1] == 'if'):
        t[0] = If(t[3], t[6], t.lineno(2), find_column(input_, t.slice[2]))
        grammarList.append(
            g.nodeGramatical(
                'INSTRUCCIONES -> IF ( EXPRESION ) GOTO LABEL PUNTOCOMA',
                f'INSTRUCCIONES.val = If(EXPRESION.val, LABEL.value'))
    elif (t[1] == 'unset'):
        t[0] = Unset(t[3], t.lineno(3), t.lexpos(3))
        grammarList.append(
            g.nodeGramatical('INSTRUCCIONES -> UNSET ( ID ) PUNTOCOMA',
                             f'INSTRUCCIONES.val = Unset(ID.value)'))
    elif (t[1] == 'goto'):
        t[0] = Goto(t[2])
        grammarList.append(
            g.nodeGramatical('INSTRUCCIONES -> GOTO LABEL PUNTOCOMA',
                             f'INSTRUCCIONES.val = Goto(LABEL.value)'))
    elif (t[1] == 'exit'):
        t[0] = Exit()
        grammarList.append(
            g.nodeGramatical('INSTRUCCIONES -> EXIT PUNTOCOMA',
                             f'INSTRUCCIONES.val = Exit( )'))
コード例 #5
0
def p_funcion(t):
    '''FUNCION      : ABS PARIZQ EXPRESION PARDER
                    | READ PARIZQ PARDER
                    | PARIZQ TIPO PARDER ID
                    | ARRAY PARIZQ PARDER'''

    global contador, conNode, fgraph, grammarList, lisInstructions
    if (t[1] == 'abs'):
        t[0] = Abs(t[3], t.lineno(3), t.lexpos(3))
        grammarList.append(
            (g.nodeGramatical('FUNCION -> ABS ( EXPRESION )',
                              f'FUNCION.val = Abs(EXPRESION.val)')))
    elif (t[1] == 'read'):
        t[0] = ReadConsole(t.lineno(1), t.lexpos(1))
        grammarList.append((g.nodeGramatical('FUNCION -> READ (  )',
                                             f'FUNCION.val = ReadConsole( )')))
    elif (t[1] == '('):
        t[0] = Cast_(Identifier(t[4], t.lineno(4), t.lexpos(4)), t[2],
                     t.lineno(2), t.lexpos(2))
        grammarList.append((g.nodeGramatical(
            'FUNCION -> ( TIPO )',
            f'FUNCION.val = Cast_(Identifier({t[4]}),{t[2]})')))
    elif (t[1] == 'array'):
        t[0] = t[1]  #devolvemos la palabra array
        grammarList.append((g.nodeGramatical('FUNCION -> ARRAY (  )',
                                             f'FUNCION.val = \'array\'')))
コード例 #6
0
def p_punt(t):
    '''PUNT :     ID ID
                | ID '''
    global grammarList
    if len(t) == 3:
        grammarList.append(
            g.nodeGramatical('PUNT  -> ID ID ', f' PUNT.val= Ids(t[1],t[2])'))
    else:
        t[0] = t[1]
        grammarList.append(
            g.nodeGramatical('PUNT  -> ID  ', f' PUNT.val= ID.value'))
コード例 #7
0
def p_default(t):
    '''DEFAULT_ :   DEFAULT DOSPUNTOS INSTRUCCIONES_INTERNAS
                    | '''

    global grammarList
    if len(t) == 4:
        t[0] = Default_(t[3], 0, t.lineno(1), t.lexpos(1))
        grammarList.append(
            g.nodeGramatical('DEFAULT_ -> empty', f'DEFAULT_.val = []'))
    else:
        t[0] = []
        grammarList.append(
            g.nodeGramatical('DEFAULT_ -> empty', f'DEFAULT_.val = []'))
コード例 #8
0
def p_asignaStructInterna(t):
    '''ASISTRCUT :  ID CORCHETES
                    | ID
    '''
    global grammarList
    if len(t) == 3:
        t[0] = IdentifierArray(t[1], t[2], t.lineno(1), t.lexpos(1))
        grammarList.append(
            g.nodeGramatical('ASISTRCUT  -> ID CORCHETES  ',
                             f'ASISTRCUT.val= IdentifyArray(t[1],t[2])'))
    else:
        t[0] = Identifier(t[1], t.lineno(1), t.lexpos(1))
        grammarList.append(
            g.nodeGramatical('ASISTRCUT  -> ID  ',
                             f'ASISTRCUT.val= ID.value)'))
コード例 #9
0
def p_llamadaFuncion(t):
    '''LLAMADA_FUNCION :     ID PARIZQ PARAMETROS PARDER 
                            | ID PARIZQ PARDER'''
    global grammarList
    if len(t) == 5:
        t[0] = CallFunction(t[1], t[3], t.lineno(2), t.lexpos(2))
        grammarList.append(
            g.nodeGramatical(
                'LLAMADA_FUNCION  -> LLAVEIZQ PARAMETROS LLAVEDER  ',
                f' LLAMADA_FUNCION.val= Call(t[1], t[3])'))
    else:
        t[0] = CallFunction(t[1], [], t.lineno(2), t.lexpos(2))
        grammarList.append(
            g.nodeGramatical('LLAMADA_FUNCION  -> ID PARIZQ PARDER  ',
                             f' LLAMADA_FUNCION.val= Call(t[1], [])'))
コード例 #10
0
def p_break(t):
    '''BREAK_ : BREAK
                | '''

    #print("estoy entrando en break")
    global grammarList
    if len(t) == 2:
        t[0] = 1
        grammarList.append(
            g.nodeGramatical('BREAK_ -> BREAK', f'BREAK_.val = [BREAK.val]'))

    else:
        t[0] = 0
        grammarList.append(
            g.nodeGramatical('BREAK_ -> empty', f'BREAK_.val = []'))
コード例 #11
0
def p_expresiones_listaCorchetesInit(t):
    '''EXPRESION :   LISTA_INIT_CORCHETE'''
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('EXPRESION  -> LISTA_INIT_CORCHETE ',
                         f' EXPRESION.val= LISTA_INIT_CORCHETE.val'))
コード例 #12
0
def p_valor(t):
    'VALOR :        EXPRESION'
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('VALOR  ->  EXPRESION ',
                         f' VALOR.val= EXPRESION.val'))
コード例 #13
0
def p_instruccionesGlobal(t):
    'A  :    INSTRUCCIONES_GLOBALES'
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('A  -> INSTRUCCIONES_GLOBALES',
                         f'A.val = INSTRUCCIONES_GLOBALES.val'))
コード例 #14
0
def p_init(t):
    'S : A'
    t[0] = t[1]
    print("Se ha reconocido la cadena.")
    global grammarList
    grammarList.append(g.nodeGramatical('S  -> A', f'S.val = A.val'))
    grammarList.reverse()
コード例 #15
0
def p_atr(t):
    '''ATR :    DECLA_VARIABLES'''
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('ATR -> DECLA_VARIABLES',
                         f'ATR.val = DECLA_VARIABLES.val'))
コード例 #16
0
def p_sentencias__empty(t):
    'SENTENCIAS_   : '
    t[0] = empty()
    global grammarList
    grammarList.append(
        g.nodeGramatical('SENTENCIAS_  -> epsilon ',
                         f'SENTENCIAS_.val = empty()'))
コード例 #17
0
def p_recepcionParametrosEmpty(t):
    'RECEPCION_PARAMETROS :  '
    t[0] = []
    global grammarList
    grammarList.append(
        g.nodeGramatical('RECEPCION_PARAMETROS  ->   empty ',
                         f' RECEPCION_PARAMETROS.val= []'))
コード例 #18
0
def p_init(t):
    'S : A'
    #code (sintetize result the A to S)
    t[0] = t[1]
    #region graph
    global fgraph, senteList, contador, conNode

    fgraph.write("n00" + str(conNode + 1) + " [label=\"A\"] ;\n")
    for i in senteList:
        fgraph.write("n00" + str(conNode + 1) + " -- " + "n00" + str(i) +
                     ";\n")
    senteList[:] = []
    contador += 1
    fgraph.write("n00" + str(conNode + 2) + " [label=\"S\"] ;\n")
    fgraph.write("n00" + str(conNode + 2) + " -- " + "n00" + str(conNode + 1) +
                 ";\n")
    conNode += 3
    #endregion

    fgraph.flush()
    fgraph.close()

    global grammarList
    grammarList.append(g.nodeGramatical('S  -> A', f'S.val = A.val'))
    grammarList.reverse()

    global lisInstructions
    tmp = flatten(lisInstructions)
    lisInstructions = tmp[:]
コード例 #19
0
def p_expresion_ope(t):
    'EXPRESION    :  OPERACION'
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('EXPRESION -> OPERACION',
                         f'EXPRESION.val = OPERACION.val'))
コード例 #20
0
def p_expresion_ato(t):
    'EXPRESION    :  ATOMICO'
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('EXPRESION -> ATOMICO',
                         f'EXPRESION.val = ATOMICO.val'))
コード例 #21
0
def p_expresion_fun(t):
    'EXPRESION    :  FUNCION'
    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('EXPRESION -> FUNCION',
                         f'EXPRESION.val = FUNCION.val'))
コード例 #22
0
def p_corchete(t):
    'CORCHETE : CORIZQ F CORDER'
    t[0] = t[2]
    global grammarList
    grammarList.append(
        g.nodeGramatical('CORCHETE -> CORQIZQ F CORDER',
                         f'CORCHETE.val = F.val'))
コード例 #23
0
def p_f_idARRAY(t):
    'F  : ID CORCHETES'
    global grammarList
    grammarList.append(
        (g.nodeGramatical('F -> ID CORCHETES',
                          f'F.val = IdentifierArray(ID.value,CORCHETES.val)')))
    t[0] = IdentifierArray(t[1], t[2], t.lineno(1),
                           find_column(input_, t.slice[1]))
コード例 #24
0
def p_instruccionesInternas(t):
    '''INSTRUCCIONES_INTERNAS :     INSTRUCCIONES_INTERNAS INSTR_IN
                                    | INSTR_IN'''
    global grammarList
    if len(t) == 3:
        t[1].append(t[2])
        t[0] = t[1]
        grammarList.append(
            g.nodeGramatical(
                'INSTRUCCIONES_INTERNAS  -> INSTRUCCIONES_INTERNAS INSTR_IN ',
                f' INSTRUCCIONES_INTERNAS_1.val.append(INSTR_IN.val) \n INSTRUCCIONES_INTERNAS.val= INSTRUCCIONES_INTERNAS_1.val'
            ))
    else:
        t[0] = [t[1]]
        grammarList.append(
            g.nodeGramatical('INSTRUCCIONES_INTERNAS  -> INSTR_IN ',
                             f'INSTRUCCIONES_INTERNAS.val= INSTR_IN.val'))
コード例 #25
0
def p_array(t):
    '''ARRAY_    :  CORCHETES IGUAL EXPRESION PUNTOCOMA
                | IGUAL EXPRESION PUNTOCOMA'''
    global grammarList
    if (t[1] == '='):
        t[0] = t[2]  #if expresion is array, expression contain 'array'
        grammarList.append(
            g.nodeGramatical('ARRAY_ -> IGUAL EXPRESION PUNTOCOMA',
                             f'ARRAY_.val = EXPRESION.val'))
    else:
        t[0] = ExpressionsDeclarationArray(t[1], t[3], t.lineno(2),
                                           find_column(input_, t.slice[2]))
        grammarList.append(
            g.nodeGramatical(
                'ARRAY_ -> CORCHETES IGUAL EXPRESION PUNTOCOMA',
                f'ARRAY_.val = ExpresionDeclarationArray(CORCHETES.val, EXPRESION.val)'
            ))
コード例 #26
0
def p_declaraciones(t):
    'DECLARACIONES  : ID ARRAY_'
    t[0] = Declaration(t[1], t.lineno(1), t.lexpos(1), t[2])
    global grammarList
    grammarList.append(
        g.nodeGramatical(
            'DECLARACIONES -> ID ARRAY',
            f'DECLARACIONES.val = Declaration(ID.value,ARRAY_.val'))
コード例 #27
0
def p_sentencia_eti(t):
    'SENTENCIA    : ETIQUETA'

    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('SENTENCIA -> ETIQUETA',
                         f'SENTENCIA.val = ETIQUETA.val'))
コード例 #28
0
def p_etiqueta(t):
    # i call label to recognize the label
    'ETIQUETA   : LABEL DOSPUNTOS'
    t[0] = Label(t[1], t.lineno(1), find_column(input_, t.slice[1]))
    global grammarList
    grammarList.append(
        g.nodeGramatical('ETIQUETA -> LABEL DOSPUNTOS',
                         f'ETIQUETA.val = Label(LABEL.value)'))
コード例 #29
0
def p_sentencia_decla(t):
    'SENTENCIA    :  DECLARACIONES'

    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('SENTENCIA -> DECLARACIONES',
                         f'SENTENCIA.val = DECLARACIONES.val'))
コード例 #30
0
def p_sentencia_instr(t):
    'SENTENCIA    :  INSTRUCCIONES'

    t[0] = t[1]
    global grammarList
    grammarList.append(
        g.nodeGramatical('SENTENCIA -> INSTRUCCIONES',
                         f'SENTENCIA.val = INSTRUCCIONES.val'))