Beispiel #1
0
def analisarCodigo(codigo, erroC):
    print " # pyCricketYacc -> analisarCodigo"
    # limpa lista de variaveis
    del variaveis[:]
    global RECOMPILE
    global PASSO
    global size
    global nomeprocs
    global erroComp
    size = 0
    nomeprocs = {}
    # Para usar os analisadores juntos é necessário passar o léxico para dentro do parser.
    Lexer = pyLex.build()
    print "    pyCricketLex.build() terminou"
    parser = yacc.yacc()
    print "    yacc.yacc() terminou"

    print codigo.lower

    result = parser.parse(codigo.lower(), lexer=Lexer, tracking=True)

    if RECOMPILE:
        print "RECOMPILE"
        size = 0
        PASSO = 2
        result = parser.parse(codigo.lower(), lexer=Lexer, tracking=True)
        RECOMPILE = False
        PASSO = 1

    print "    parse.parse() gerou resultado '%s'" % result

    erroC.pop()
    erroC.insert(0, erroComp)
    return result
Beispiel #2
0
def analisarCodigo(codigo, errMsgFunction=None):
    print " # pyYacc -> analisarCodigo"
    #limpa lista de variaveis
    del variaveis[:]

    global RECOMPILE
    global size
    global nomeprocs

    global src_code
    global errMsgFunc

    errMsgFunc = errMsgFunction

    src_code = codigo
    print src_code

    size = 0
    nomeprocs = {}
    #Para usar os analisadores juntos é necessário passar o léxico para dentro do parser.
    Lexer = pyLex.build(optimize=1, debug=0)
    print "    pyLex.build() ended"
    parser = yacc.yacc(optimize=1, debug=0)
    print "    yacc.yacc() ended"

    pyLex.setErrMsgFunc(errMsgFunc)

    if errMsgFunc:
        errMsgFunc('***BEGIN***')
    result = parser.parse(src_code.lower(),
                          lexer=Lexer,
                          debug=0,
                          tracking=True)
    if RECOMPILE:
        print 'RECOMPILE'
        size = 0
        if errMsgFunc:
            errMsgFunc('***BEGIN***')
        result = parser.parse(src_code.lower(),
                              lexer=Lexer,
                              debug=0,
                              tracking=True)
        #RECOMPILE=False
    if errMsgFunc:
        errMsgFunc('***END***')

    print "    parse.parse() generated result '%s'" % result
    return result
Beispiel #3
0
def analisarCodigo(codigo):
    #limpa lista de variaveis
    del variaveis[:]
    global RECOMPILE
    global size
    global nomeprocs
    size = 0
    nomeprocs = {}
    #Para usar os analisadores juntos é necessário passar o léxico para dentro do parser.
    Lexer = pyLex.build()
    parser = yacc.yacc(write_tables=0)
    result = parser.parse(codigo.lower(), lexer=Lexer, tracking=True)
    if RECOMPILE:
        size = 0
        result = parser.parse(codigo.lower(), lexer=Lexer, tracking=True)
        RECOMPILE = False
    return result