예제 #1
0
def insereVar(cod, toke, eh_token, tipo):
    #global TABELA_SIMBOLOS
    tok = token()
    tok.cod = cod
    tok.token = toke
    tok.eh_token = eh_token
    tok.linha = GL.CONT_LINHA
    tok.tipo = tipo
    GL.TABELA_SIMBOLOS.append(tok)
예제 #2
0
 def identify(self):
     s = ''
     totals = list()
     ID = 0
     INT = 0
     FLOAT = 0
     CHAR = 0
     OPPLUS = 0
     OPTIMES = 0
     OPASSIGN = 0
     OPREL = 0
     OPLOG = 0
     LEFTPAR = 0
     RIGHTPAR = 0
     LEFTBRA = 0
     RIGHTBRA = 0
     DELIM = 0
     for i in self.tokens:
         if i == '+' or i == '-':
             s = s + i + ' : Operador Suma\n'
             self.aTokens.append(token('OPPLUS', i))
             OPPLUS = OPPLUS + 1
         elif i.upper == 'PRINT':
             s = s + i + ' : Identificador\n'
             self.aTokens.append(token('PRINT', i))
             ID = ID + 1
         elif i == '*' or i == '/':
             s = s + i + ' : Operador Multiplicacion\n'
             self.aTokens.append(token('OPTIMES', i))
             OPTIMES = OPTIMES + 1
         elif i == '>' or i == '<' or i == '<=' or i == '>=':
             s = s + i + ' : Operador Relacional\n'
             self.aTokens.append(token('OPREL', i))
             OPREL = OPREL + 1
         elif i == '!':
             s = s + i + ' : Operador Logico\n'
             self.aTokens.append(token('OPLOG', i))
             OPLOG = OPLOG + 1
         elif i == '{' or i == '}':
             s = s + i + ' : Llave\n'
             if i == '{':
                 LEFTBRA = LEFTBRA + 1
                 self.aTokens.append(token('LEFTBRA', i))
             else:
                 RIGHTBRA = RIGHTBRA + 1
                 self.aTokens.append(token('RIGHTBRA', i))
         elif i == '(' or i == ')':
             s = s + i + ' : Parentesis\n'
             if i == '(':
                 LEFTPAR = LEFTPAR + 1
                 self.aTokens.append(token('LEFTPAR', i))
             else:
                 RIGHTPAR = RIGHTPAR + 1
                 self.aTokens.append(token('RIGHTPAR', i))
         elif i == '=':
             s = s + i + ' : Operador de Asignacion\n'
             self.aTokens.append(token('OPASSIGN', i))
             OPASSIGN = OPASSIGN + 1
         elif i == ';' or i == ',':
             s = s + i + ' : Delimitador\n'
             self.aTokens.append(token('DELIM', i))
             DELIM = DELIM + 1
         else:
             state = 0
             for j in i:
                 if state == 0:
                     if match('[a-zA-Z_]', j):
                         state = 1
                     elif match('[0-9]', j):
                         state = 2
                     elif j == '=':
                         state = 4
                     elif j == '!':
                         state = 5
                     elif j == '&':
                         state = 6
                     elif j == '|':
                         state = 7
                     elif j == '\"':
                         state = 12
                     else:
                         state = -1
                 elif state == 1:
                     if match('[a-zA-Z0-9_]', j):
                         state = 1
                     else:
                         state = -1
                 elif state == 2:
                     if match('[0-9]', j):
                         state = 2
                     elif j == '.':
                         state = 3
                     else:
                         state = -1
                 elif state == 3:
                     if match('[0-9]', j):
                         state = 3
                     else:
                         state = -1
                 elif state == 4:
                     if j == '=':
                         state = 8
                     else:
                         state = -1
                 elif state == 5:
                     if j == '=':
                         state = 9
                     else:
                         state = -1
                 elif state == 6:
                     if j == '&':
                         state = 10
                     else:
                         state = -1
                 elif state == 7:
                     if j == '|':
                         state = 11
                     else:
                         state = -1
                 elif state == 12:
                     if j == '\"':
                         state = 13
                     elif match('[a-zA-Z_]', j):
                         state = 12
                     else:
                         state = -1
                 else:
                     state = -1
             if state == 1:
                 s = s + i + ' : Identificador\n'
                 self.aTokens.append(token('ID', i))
                 ID = ID + 1
             elif state == 2:
                 s = s + i + ' : Numero Entero\n'
                 self.aTokens.append(token('INT', i))
                 INT = INT + 1
             elif state == 3:
                 s = s + i + ' : Numero Real\n'
                 self.aTokens.append(token('FLOAT', i))
                 FLOAT = FLOAT + 1
             elif state == 8 or state == 9:
                 s = s + i + ' : Operador Relacional\n'
                 self.aTokens.append(token('OPREL', i))
                 OPREL = OPREL + 1
             elif state == 10 or state == 11:
                 s = s + i + ' : Operador Logico\n'
                 self.aTokens.append(token('OPLOG', i))
                 OPLOG = OPLOG + 1
             elif state == 13:
                 s = s + i + ' : Cadena\n'
                 self.aTokens.append(token('CHAR', i))
                 CHAR = CHAR + 1
             else:
                 s = s + i + ' : Error\n'
                 self.eFlag = True
                 return -1
     totals.append(ID)
     totals.append(INT)
     totals.append(FLOAT)
     totals.append(CHAR)
     totals.append(OPPLUS)
     totals.append(OPTIMES)
     totals.append(OPASSIGN)
     totals.append(OPREL)
     totals.append(OPLOG)
     totals.append(LEFTPAR)
     totals.append(RIGHTPAR)
     totals.append(LEFTBRA)
     totals.append(RIGHTBRA)
     totals.append(DELIM)
     #self.aTokens.append( token( 'EPSILON', '' ) )
     for i in self.aTokens:
         print(i.getType())
     return totals
예제 #3
0
def genToken(nlist):
    ipTOid =[]
    for node in nlist:
        ipTOid[node.id]= node.ip_addr
    return(token(ipTOid,nlist))
예제 #4
0
def insereVar(cod, toke):
    global TABELA_SIMBOLOS
    tok = token()
    tok.cod = cod
    tok.token = toke
    TABELA_SIMBOLOS.append(tok)
예제 #5
0
def insereTabSimb(constante, valor):
    global TABELA_SIMBOLOS
    tok = token()
    tok.valor = valor
    tok.token = constante
    TABELA_SIMBOLOS.append(tok)
예제 #6
0
 def __init__(self, tokens):
     self.tokens = tokens
     self.inputStack = list()
     self.outputStack = list()
     self.actionStack = list()
     self.error = False
     self.inputStack.append(token('$', '$'))
     for i in reversed(tokens):
         self.inputStack.append(i)
     self.table = {
         'OPPLUS': {
             '0': 'd-3',
             '2': 'd-6',
             '3': 'd-3',
             '4': 'd-3',
             '5': 'd-3',
             '6': 'd-3',
             '7': 'd-3',
             '8': 'd-6',
             '9': 'd-6',
             '11': 'r-3',
             '12': 'r-4',
             '13': 'r-6',
             '14': 'r-7'
         },
         'OPTIMES': {
             '2': 'd-7',
             '8': 'd-7',
             '9': 'd-7',
             '11': 'd-7',
             '12': 'r-4',
             '13': 'r-6',
             '14': 'r-7'
         },
         'LEFTPAR': {
             '0': 'd-4',
             '3': 'd-4',
             '5': 'd-4',
             '6': 'd-4',
             '7': 'd-4'
         },
         'RIGHTPAR': {
             '8': 'r-5',
             '9': 'd-13',
             '11': 'r-3',
             '12': 'r-4',
             '13': 'r-6',
             '14': 'r-7'
         },
         'DELIM': {
             '2': 'd-5',
             '8': 'r-5',
             '11': 'r-3',
             '12': 'r-4',
             '13': 'r-6',
             '14': 'r-7'
         },
         '$': {
             '0': 'r-2',
             '1': 'ok',
             '5': 'r-2',
             '10': 'r-1'
         },
         'ID': {
             '0': 'd-14',
             '3': 'd-14',
             '4': 'd-14',
             '5': 'd-14',
             '6': 'd-14',
             '7': 'd-14'
         },
         'S': {
             '0': '1',
             '5': '10'
         },
         'E': {
             '0': '2',
             '3': '8',
             '4': '9',
             '5': '2',
             '6': '11',
             '7': '12'
         }
     }