#!/usr/bin/python3

from common.utility.util import *

class SymbTable():
    def __init__(self):
        self.tabela = []
        self.init_table()

    def init_table(self):
        self.append_table('inicio', 'inicio')
        self.append_table('varinicio', 'varinicio')
        self.append_table('varfim', 'varfim')
        self.append_table('escreva', 'escreva')
        self.append_table('leia', 'leia')
        self.append_table('se', 'se')
        self.append_table('entao', 'entao')
        self.append_table('fimse', 'fimse')
        self.append_table('enquanto', 'enquanto')
        self.append_table('faca', 'faca')
        self.append_table('fimenquanto', 'fimenquanto')
        self.append_table('fim', 'fim')
        self.append_table('inteiro', 'inteiro')
        self.append_table('lit', 'lit')
        self.append_table('real', 'real')

    def append_table(self, lexema, token, tipo = ''):
        preencher_tabela = {'lexema':lexema,'token': token,'tipo':tipo}
        try:
            self.tabela.append(preencher_tabela)
            return True
        except:
            raise

    def get_symbol(self, lexema, token):
        for line in self.tabela:
            if line['token'] == token and line['lexema'] == lexema :
                return line
        return False

    def put_tipo (self, lexema, token, tipo):
        for line in self.tabela:
            if line['token'] == token and line['lexema'] == lexema:
                line.update(('tipo', tipo) for chave, valor in line.items())

            #if line['token'] == token and line['lexema'] == lexema :

    def palavra_reservada(self, lexema):
        if self.get_symbol(lexema, lexema) is not False:
            return True
        else:
            return False

    def palavra_nao_reservada(self, lexema, token):
        if self.get_symbol(lexema, token) is not False:
            return True
        else:
            return False

    def print_table(self):
        impressao_bonita('linha')
        print(bcolors.BOLD +"|%-10s  %-10s %-10s TABELA DE SIMBOLOS %-10s  %-10s   %-10s |" % (' ', ' ', ' ', ' ',' ', ' ') + bcolors.END )
        impressao_bonita('linha')
        print(bcolors.BOLD+"|%-2s  %-25s| %-10s  %-10s %-5s| %-10s  %-10s %-5s|" % (' ', 'Lexema', ' ', 'Token', ' ',' ','Tipo',' ')+bcolors.END)
        impressao_bonita('linha')

        for line in self.tabela:
            if line['lexema'] is line['token']:
                impressao_bonita('reservada', line['lexema'], line['token'], line['tipo'])
                #print (line['tipo'])
            else:
                impressao_bonita('repetida', line['lexema'], line['token'], line['tipo'])
        impressao_bonita('linha')

#!/usr/bin/python3

from common.utility.util import *

class SymbTable():
    def __init__(self):
        self.tabela = []
        self.init_table()

    def init_table(self):
        self.append_table('inicio', 'inicio')
        self.append_table('varinicio', 'varinicio')
        self.append_table('varfim', 'varfim')
        self.append_table('escreva', 'escreva')
        self.append_table('leia', 'leia')
        self.append_table('se', 'se')
        self.append_table('entao', 'entao')
        self.append_table('fimse', 'fimse')
        self.append_table('enquanto', 'enquanto')
        self.append_table('faca', 'faca')
        self.append_table('fimenquanto', 'fimenquanto')
        self.append_table('fim', 'fim')
        self.append_table('inteiro', 'inteiro')
        self.append_table('lit', 'lit')
        self.append_table('real', 'real')

    def append_table(self, lexema, token, tipo = ''):
        preencher_tabela = {'lexema':lexema,'token': token,'tipo':tipo}
        try:
            self.tabela.append(preencher_tabela)
            return True
        except:
            raise

    def get_symbol(self, lexema, token):
        for line in self.tabela:
            if line['token'] == token and line['lexema'] == lexema :
                return line
        return False

    def put_tipo (self, lexema, token, tipo):
        for line in self.tabela:
            if line['token'] == token and line['lexema'] == lexema:
                line.update(('tipo', tipo) for chave, valor in line.items())

            #if line['token'] == token and line['lexema'] == lexema :

    def palavra_reservada(self, lexema):
        if self.get_symbol(lexema, lexema) is not False:
            return True
        else:
            return False

    def palavra_nao_reservada(self, lexema, token):
        if self.get_symbol(lexema, token) is not False:
            return True
        else:
            return False

    def print_table(self):
        impressao_bonita('linha')
        print(bcolors.BOLD +"|%-10s  %-10s %-10s TABELA DE SIMBOLOS %-10s  %-10s   %-10s |" % (' ', ' ', ' ', ' ',' ', ' ') + bcolors.END )
        impressao_bonita('linha')
        print(bcolors.BOLD+"|%-2s  %-25s| %-10s  %-10s %-5s| %-10s  %-10s %-5s|" % (' ', 'Lexema', ' ', 'Token', ' ',' ','Tipo',' ')+bcolors.END)
        impressao_bonita('linha')

        for line in self.tabela:
            if line['lexema'] is line['token']:
                impressao_bonita('reservada', line['lexema'], line['token'], line['tipo'])
                #print (line['tipo'])
            else:
                impressao_bonita('repetida', line['lexema'], line['token'], line['tipo'])
        impressao_bonita('linha')

#!/usr/bin/python3 #if line['token'] == token and line['lexema'] == lexema : #print (line['tipo'])