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)
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
def genToken(nlist): ipTOid =[] for node in nlist: ipTOid[node.id]= node.ip_addr return(token(ipTOid,nlist))
def insereVar(cod, toke): global TABELA_SIMBOLOS tok = token() tok.cod = cod tok.token = toke TABELA_SIMBOLOS.append(tok)
def insereTabSimb(constante, valor): global TABELA_SIMBOLOS tok = token() tok.valor = valor tok.token = constante TABELA_SIMBOLOS.append(tok)
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' } }