Páginas

12 dezembro 2017

Meu Analisador Léxico

Bom dia pessoal!
Desenvolvi no semestre passado um analisador Léxico se alguém quiser  estou postando aqui como se faz espero que gostem!

TELA PRINCIPAL


Essa é a tela inicial do sistema, quando o usuário abrir o programa ela aparecerá. Os componentes usados foram:
·         Um MenuStrip - (Incluir Alfabeto, Sair; Compilador; Sair)
·         WebBrowser
Essa tela é bem simples mesmo não tem segredo, e quase não tem código. Nessa tela é onde se chama as outras telas do sistema, tudo de maneira padrão.
namespace Compilador
{
    public partial class Principal : Form
    {
        public Principal()
        {
            InitializeComponent();
        }
        //Chama a tela de Alfabeto.
        private void cadastroDoDicionarioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Alfabeto frm = new Alfabeto();
            frm.Show();          
        }
        //Sai do sistema
        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void sairToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void compilarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Compilador frm = new Compilador();
            frm.Show(); 
        }
     
    }
} 

TELA  CADASTRO DE ALFABETO


Essa tela foi feita para o usuário antes de cadastrar um novo token ter saber quais são os que já têm assim não cadastrando o mesmo nome duas vezes. Nessa tela o usuário além de cadastrar um novo token e ver quais os tokens cadastrados, ele pode também pesquisar o todos os tokens que tem o mesmo nome, somente clicando no nome que ele quer pesquisar e pressionando o botão Pesquisar. Para fazer essa tela foram usados os seguintes componentes:
·         Três Textbox – (txtCodigo, txtToken e txtDescrição).
·         Seis Buttons – (Atualizar, Adicionar, Limpar, Salvar, Pesquisar e Sair).
·         Três Labels – (Código, Token e Descrição).
·         Um DataGridView
·         Um MenuStrip

ATUALIZAR


Vamos começar a explicar a função do botão de atualizar que deve ser o primeiro a ser usado pelo usuário. Esse comando seleciona os dados que estão no banco e os seus códigos, e mostra na tela (DataGridView) para o usuário ver e usar. Como mostrado na imagem acima. E logo abaixo eu coloquei uma função que eu fiz para aparecer os dados do grid no textbox.
  //Atualiza e mostra no grid
        private void btnAtualizar_Click(object sender, EventArgs e)
        {
            //Pega o ID
            int codigo = Conexao.ProximoID("GD_COMPILADOR");

            //Atualiza e mostra no grid
            StringBuilder sql = new StringBuilder();
            sql.Append("select * from dicionario order by codigo");
            gdvDados.DataSource = Conexao.RetornaTabela("select * from dicionario order by codigo");
        }

//Passando os dados do Grid para os textbox
        private void gdvDados_Click(object sender, EventArgs e)
        {
            if (gdvDados.DataSource != null)
            {
                if (gdvDados[0, gdvDados.CurrentRow.Index].Value.ToString() != "")
                {
                    txtCodigo.Text = gdvDados[0, gdvDados.CurrentRow.Index].Value.ToString();
                    txtToken.Text = gdvDados[1,
gdvDados.CurrentRow.Index].Value.ToString();
                    txtDescricao.Text = gdvDados[2, gdvDados.CurrentRow.Index].Value.ToString();
                }
            }
        }

ADICIONAR


O botão de adicionar é simples também, o usuário digita o nome do token que quer cadastrar e a descrição dele, depois é só clicar no botão de adicionar que ele coloca um código automático e aparece no grid. O código faz isso ai que esta escrito, foi criada uma variável inteira chamada código pra receber a função ProximoID e passado o gerador que trará o código. Esse código da um insert na tabela dicionário e passa os parâmetros para o banco e ser inserido, no final da um select na tabela e mostra os dados no Grid.
//Adicionar
        private void btnAdicionar_Click(object sender, EventArgs e)
        {
            //Pega o ID
            int codigo = Conexao.ProximoID("GD_COMPILADOR");

            //Insere no banco de dados
            StringBuilder sql = new StringBuilder();
            sql.Append("Insert into dicionario (codigo,nome,descricao) values (@codigo,@nome,@descricao)");
            List<FbParameter> _param = new List<FbParameter>();
            _param.Add(new FbParameter("codigo", codigo));
            _param.Add(new FbParameter("nome", txtToken.Text));
            _param.Add(new FbParameter("descricao", txtDescricao.Text));
            Conexao.ExecutarComando(sql.ToString(), _param);
            gdvDados.DataSource = Conexao.RetornaTabela("select * from dicionario order by codigo");
        }

LIMPAR


Esse é o botão mais simples de todos, ele simplesmente limpa os textbox, poderia ter feito de uma função para limpar os textbox e tudo mais, porém não via a necessidade já que só tenho três textbox, então foi do jeito comum mesmo. O código é esse:
//Limpar      
 private void btnLimpar_Click(object sender, EventArgs e)
        {
            txtToken.Clear();
            txtCodigo.Clear();
            txtDescricao.Clear();
        }

SALVAR


O botão de salvar ele poderia ser chamado também de alterar porque tem a mesma função. Quando o usuário quiser alterar alguma palavra ele não precisa exclui – lá e escreve – lá novamente, simplesmente clica em cima dela, e altera o token ou a descrição nos textbox e clica em salvar, automaticamente é atualizada a palavra que estava escrita no banco pela que o usuário acabou de escrever e no final é dado um select no banco.

//Salvar uma alteração
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("UPDATE dicionario SET nome = @nome, descricao = @descricao WHERE codigo = @codigo");
            List<FbParameter> _param = new List<FbParameter>();
            _param.Add(new FbParameter("codigo", txtCodigo.Text));
            _param.Add(new FbParameter("nome", txtToken.Text));
            _param.Add(new FbParameter("descricao", txtDescricao.Text));
            Conexao.ExecutarComando(sql.ToString(), _param);
            gdvDados.DataSource = Conexao.RetornaTabela("select * from dicionario order by codigo");
        }

PESQUISAR


O botão de pesquisar é bem interessante e pode ser usado de duas maneiras a primeira é como vemos na tela acima o usuário digita a palavra e o sistema procura outras palavras iguais a que esta escrita no textbox token. A segunda maneira é clicando em cima da palavra e depois em pesquisar, automaticamente ele já retorna as palavras iguais. Lembrando q o c# é case sensitive e eu não mudei o sistema, para diferenciar maiúsculas de minúsculas.

//Pesquisar dados na tabela.
        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            String sql;
            if (txtToken.Text == "")//Se txtToken estiver vazio
            {
                sql = "select * from DICIONARIO order by codigo";//esse comando vai selecionar todos os dados da tabela e mostrar no grid
            }
            else//senão extiver vazio
            {
                //esse comando vai procurar no banco todos os nomes iguais ao q esta no txtbox
                sql = "select * from DICIONARIO where NOME = '" + txtToken.Text + "' order by codigo";
            }
            gdvDados.DataSource = Conexao.RetornaTabela(sql);//aparece o resultado no textbox
        }

AJUDA


Para o usurário ter acesso a essas informações é só ele clicar em ajudar e depois ir a Instruções do Sistema. O código usado foi:
//Instruções de como usar o sistema
        private void instruçõesDoSistemaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Instruções para um melhor uso do sistema, siga as intruções abaixo:" + ("\n") +
                             "1º Comece atualizando o sistema" + ("\n") +
                             "2º Digite o nome do novo token e clique em adicionar" + ("\n") +
                             "3º Para digitar um novo token, clique no botão de limpar e repita o 2º passo");

        }

SAIR


O botão de sair como o nome já diz, sai do sistema ou seja da tela que o usuário esta olhando naquele momento, o código é o básico mesmo.
//Sair do Sistema
        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

TELA COMPILADOR

Essa é a tela do compilador do sistema, a parte que o mais esperada do sistema inteiro, é aqui que realmente precisa funcionar. Para não ficar tão simples essa tela tão importante nós programamos alguns códigos a mais, para embelezar o sistema.
·         Um TextBox com a função Multiline (txtEscreve).
·         Quatro Buttons (Compilar, Limpar, Plano de fundo e Sair).
·         Um ColorDialog.
Essa tela não tem muito segredo não. No textbox será escrito o código. E ao clicar no botão de compilar será feito a verificação do código, se os tokens que estão escritos no textbox, estão guardados no banco de dados.

COMPILAR


No botão de compilar foi criada uma função que valida o token, ou seja, essa função vai ao banco e compara a palavra escrita na tela com a do banco. Assim sendo, foi feito dois if um que diz envia uma mensagem dizendo que o token não está no banco de dados, e outro que confirma o cadastro do token no banco.
private void btnCompila_Click(object sender, EventArgs e)
        {
            //O replace substitui um caracter por outro, nesse caso irá substituir quebra de linha por um espaço, dois espaços por um, e caracteres especiais por espaço.
            string algoritmo = txtEscreve.Text.Replace("\n"" ").Replace("\r""").Replace("  "" ");
            string[] vetor = algoritmo.Split(' ');
            Boolean erro = false;
            for (int i = 0; i < vetor.Length; i++)
            {
                if (!validaToken(vetor[i].ToString()))
                {
                    erro = true;
                    MessageBox.Show(" O erro está " + (vetor[i].ToString()));
                    i = vetor.Length + 1;
                }
            }
            if (erro == false)
            {
                MessageBox.Show(" Processo realizado com sucesso ");
            }
        }
        //Função pra validar
        private Boolean validaToken(string token)
        {
            DataTable dt = new DataTable();
            dt = Conexao.RetornaTabela("select count(*) from DICIONARIO where NOME = '" + token + "'");
            if (int.Parse(dt.Rows[0][0].ToString()) >= 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

LIMPAR



Esse é o botão mais simples de todos, ele simplesmente limpa os textbox O código é esse:
//Limpa a tela
        private void btnLimpa_Click(object sender, EventArgs e)
        {
            txtEscreve.Clear();
        }

PLANO DE FUNDO


Esse é o botão também tem uma função bem simples, e um pouco desconhecida porque foi bem difícil achar algo que levasse a ideia dessa função. Ela foi feita só pra embelezar o programa mesmo.



Como eu disse no começo desse trabalho foi usado um ColorDialog que ira abrir a caixa de cores, quando o usuário escolher a cor e clicar em ok será colocada a cor no fundo da tela, ou seja, no txtEscreve.
//Mudar a cor do Fundo
        private void PlanoDeFundo_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            txtEscreve.BackColor = colorDialog1.Color;
        } 

SAIR


  O botão de sair como o nome já diz, sai do sistema ou seja da tela que o usuário esta olhando naquele momento, o código é o básico mesmo.
//Fechar
        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}




É um modelo bem simples mais eu espero que tenham gostado, qualquer dúvida é só perguntar.




Nenhum comentário:

Postar um comentário