Ejemplo n.º 1
0
        public void runCompiler(LpdFile lpdFile)
        {
            try
            {
                lexicon.lexicalAnalyser(lpdFile);
            }
            catch (LexiconException ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                flag++;
            }

            try
            {
                List <string> output = syntactic.syntacticAnalyser(lexicon, semantic);
                lpdFile.createAssemblyFile(output);
            }
            catch (LexiconException ex)
            {
                MessageBox.Show(ex.Message, "Erro Léxico", MessageBoxButtons.OK, MessageBoxIcon.Error);
                flag++;
            }
            catch (SyntacticException ex)
            {
                MessageBox.Show(ex.Message, "Erro Sintático", MessageBoxButtons.OK, MessageBoxIcon.Error);
                flag++;
            }
            catch (SemanticException ex)
            {
                MessageBox.Show(ex.Message, "Erro Semantico", MessageBoxButtons.OK, MessageBoxIcon.Error);
                flag++;
            }
        }
Ejemplo n.º 2
0
        public Token trataPontuacao(LpdFile lpdFile)
        {
            Token token = new Token();

            if (character == ';')
            {
                token.simbolo = "sponto_virgula";
            }
            else if (character == ',')
            {
                token.simbolo = "svirgula";
            }
            else if (character == '(')
            {
                token.simbolo = "sabre_parenteses";
            }
            else if (character == ')')
            {
                token.simbolo = "sfecha_parenteses";
            }
            else if (character == '.')
            {
                token.simbolo = "sponto";
            }

            token.lexema = character.ToString();
            token.line   = lpdFile.currentLine + 1;
            character    = lpdFile.getCharacter();

            return(token);
        }
Ejemplo n.º 3
0
        private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //dataGridView1.Rows.Clear();
            lpdFile = new LpdFile();
            int    i = 1;
            string s;

            //define as propriedades do controle
            //OpenFileDialog
            this.openFileDialog1.Multiselect = true;
            this.openFileDialog1.Title       = "Selecionar Arquivo";
            openFileDialog1.InitialDirectory = @"C:\Dados\";
            //filtra para exibir somente arquivos textos
            openFileDialog1.Filter           = "Images (*.TXT)|*.TXT|" + "All files (*.*)|*.*";
            openFileDialog1.CheckFileExists  = true;
            openFileDialog1.CheckPathExists  = true;
            openFileDialog1.FilterIndex      = 1;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.ReadOnlyChecked  = true;
            openFileDialog1.ShowReadOnly     = true;
            DialogResult dr = this.openFileDialog1.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    lpdFile.name = openFileDialog1.FileName;
                    FileStream   fs             = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
                    StreamReader m_streamReader = new StreamReader(fs);
                    // Lê o arquivo usando a classe StreamReader
                    m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
                    // Lê cada linha do stream e faz o parse até a última linha
                    this.richTextBox1.Text = "";
                    string strLine = m_streamReader.ReadLine();
                    while (strLine != null)
                    {
                        /*s = Convert.ToString(i);
                         * if(i < 10)*/
                        this.richTextBox1.Text += strLine + "\n";

                        /* else
                         *   this.richTextBox1.Text += s+"    "+ strLine + "\n";*/
                        strLine = m_streamReader.ReadLine();
                        i++;
                    }
                    // Fecha o stream
                    m_streamReader.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            AddLineNumbers();
            richTextBox2.Text = "";
        }
Ejemplo n.º 4
0
        public Token trataOperadorRelacional(LpdFile lpdFile)
        {
            Token  token    = new Token();
            string operador = String.Copy(Char.ToString(character));

            character = lpdFile.getCharacter();

            if (character == '=')
            {
                operador  = operador + character;
                character = lpdFile.getCharacter();
            }

            token.lexema = operador;
            token.line   = lpdFile.currentLine + 1;
            switch (operador)
            {
            case "<":
                token.simbolo = "smenor";
                break;

            case ">":
                token.simbolo = "smaior";
                break;

            case "=":
                token.simbolo = "sig";
                break;

            case "!=":
                token.simbolo = "sdif";
                break;

            case "<=":
                token.simbolo = "smenorig";
                break;

            case ">=":
                token.simbolo = "smaiorig";
                break;

            default:
                //throw new LexiconException(lpdFile.currentLine + 1);
                token.simbolo = "serro";
                token.line    = lpdFile.currentLine + 1;
                break;
            }

            return(token);
        }
Ejemplo n.º 5
0
 public Token getToken(LpdFile lpdFile)
 {
     if (Char.IsNumber(character) == true)
     {
         return(trataDigito(lpdFile));
     }
     else
     {
         if (Char.IsLetter(character) == true)
         {
             return(trataIdPalavraReservada(lpdFile));
         }
         else
         {
             if (character == ':')
             {
                 return(trataAtribuicao(lpdFile));
             }
             else
             {
                 if (character == '+' || character == '-' || character == '*')
                 {
                     return(trataOperadorAritmetico(lpdFile));
                 }
                 else
                 {
                     if (character == '<' || character == '>' || character == '=' || character == '!')
                     {
                         return(trataOperadorRelacional(lpdFile));
                     }
                     else
                     {
                         if (character == ';' || character == '(' || character == ')' || character == '.' || character == ',')
                         {
                             return(trataPontuacao(lpdFile));
                         }
                         else
                         {
                             //throw new LexiconException(lpdFile.currentLine+1);
                             Token tokenError = new Token();
                             tokenError.simbolo = "serro";
                             tokenError.line    = lpdFile.currentLine + 1;
                             return(tokenError);
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 6
0
        // Trata X

        public Token trataDigito(LpdFile lpdFile)
        {
            Token  token = new Token();
            string num;

            num = String.Copy(Char.ToString(character));

            character = lpdFile.getCharacter();
            while (Char.IsNumber(character))
            {
                num       = num + character;
                character = lpdFile.getCharacter();
            }
            token.simbolo = "snumero";
            token.lexema  = num;
            token.line    = lpdFile.currentLine + 1;

            return(token);
        }
Ejemplo n.º 7
0
        public Token trataOperadorAritmetico(LpdFile lpdFile)
        {
            Token token = new Token();

            if (character == '+')
            {
                token.simbolo = "smais";
            }
            else if (character == '-')
            {
                token.simbolo = "smenos";
            }
            else if (character == '*')
            {
                token.simbolo = "smult";
            }

            token.lexema = character.ToString();
            token.line   = lpdFile.currentLine + 1;
            character    = lpdFile.getCharacter();

            return(token);
        }
Ejemplo n.º 8
0
        public Token trataAtribuicao(LpdFile lpdFile)
        {
            Token  token = new Token();
            string atribuicao;

            atribuicao = String.Copy(Char.ToString(character));

            character = lpdFile.getCharacter();

            if (character == '=')
            {
                atribuicao    = atribuicao + character;
                token.simbolo = "satribuicao";
                character     = lpdFile.getCharacter();
            }
            else
            {
                token.simbolo = "sdoispontos";
            }
            token.lexema = atribuicao;
            token.line   = lpdFile.currentLine + 1;

            return(token);
        }
Ejemplo n.º 9
0
        private void compilarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //dataGridView1.Rows.Clear();
            richTextBox2.Text = "";
            int index = 0;

            lpdFile = new LpdFile();

            if (openFileDialog1.FileName != "")
            {
                lpdFile.name = openFileDialog1.FileName;
            }

            if (lpdFile.name == null)
            {
                //MessageBox.Show("Você precisa abrir um arquivo primeiro!\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                FileStream   fs             = new FileStream("temporary.txt", FileMode.Create, FileAccess.Write);
                StreamWriter m_streamWriter = new StreamWriter(fs);
                m_streamWriter.Flush();
                // Escreve para o arquivo usando a classe StreamWriter
                m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin);
                // escreve no controle richtextbox
                m_streamWriter.Write(this.richTextBox1.Text);
                // fecha o arquivo
                m_streamWriter.Flush();
                m_streamWriter.Close();

                lpdFile.name = "temporary.txt";
            }

            lpdFile.readFile(lpdFile.name);

            if (lpdFile.content.Count() == 0)
            {
                MessageBox.Show("Você precisa abrir um arquivo primeiro!\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                compiler = new Compiler();
                compiler.runCompiler(lpdFile);
                if (compiler.returnError() != 0)
                {
                    //int n = dataGridView1.Rows.Add();
                    //dataGridView1.Rows[n].Cells[0].Value = compiler.syntactic.line;
                    //dataGridView1.Rows[n].Cells[1].Value = compiler.syntactic.message;
                    richTextBox2.Text = "Linha " + compiler.syntactic.line + ":" + " " + compiler.syntactic.message;
                    index             = (compiler.syntactic.line - 1);
                    try
                    {
                        richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(index), richTextBox1.Lines[index].Length);
                        richTextBox1.SelectionColor = Color.Red;
                    }
                    catch (Exception)
                    {
                    }
                }
                else
                {
                    richTextBox2.Text = "Compilado com sucesso!";
                }
            }
        }
Ejemplo n.º 10
0
        public Token trataIdPalavraReservada(LpdFile lpdFile)
        {
            Token  token = new Token();
            string id;

            id = String.Copy(Char.ToString(character));
            int line = lpdFile.currentLine;

            character = lpdFile.getCharacter();

            while (Char.IsLetter(character) || Char.IsNumber(character) || character == '_')
            {
                if (line == lpdFile.currentLine)
                {
                    id        = id + character;
                    character = lpdFile.getCharacter();
                }
                else
                {
                    break;
                }
            }

            token.lexema = id;
            token.line   = lpdFile.currentLine + 1;
            switch (id)
            {
            case "programa":
                token.simbolo = "sprograma";
                break;

            case "se":
                token.simbolo = "sse";
                break;

            case "entao":
                token.simbolo = "sentao";
                break;

            case "senao":
                token.simbolo = "ssenao";
                break;

            case "enquanto":
                token.simbolo = "senquanto";
                break;

            case "faca":
                token.simbolo = "sfaca";
                break;

            case "inicio":
                token.simbolo = "sinicio";
                break;

            case "fim":
                token.simbolo = "sfim";
                break;

            case "escreva":
                token.simbolo = "sescreva";
                break;

            case "leia":
                token.simbolo = "sleia";
                break;

            case "var":
                token.simbolo = "svar";
                break;

            case "inteiro":
                token.simbolo = "sinteiro";
                break;

            case "booleano":
                token.simbolo = "sbooleano";
                break;

            case "verdadeiro":
                token.simbolo = "sverdadeiro";
                break;

            case "falso":
                token.simbolo = "sfalso";
                break;

            case "procedimento":
                token.simbolo = "sprocedimento";
                break;

            case "funcao":
                token.simbolo = "sfuncao";
                break;

            case "div":
                token.simbolo = "sdiv";
                break;

            case "e":
                token.simbolo = "se";
                break;

            case "ou":
                token.simbolo = "sou";
                break;

            case "nao":
                token.simbolo = "snao";
                break;

            default:
                token.simbolo = "sidentificador";
                break;
            }

            return(token);
        }
Ejemplo n.º 11
0
        public void lexicalAnalyser(LpdFile lpdfile)
        {
            character = lpdfile.getCharacter();
            int   length = lpdfile.content.Length;
            Token token;

            while (!lpdfile.isEndOfFile())
            {
                while ((character == '{' || character == '/' || character == ' ' || character == '\t') && !lpdfile.isEndOfFile())
                {
                    if (character == '{')
                    {
                        int beginCommentLine = lpdfile.currentLine;
                        while (character != '}' && !lpdfile.isEndOfFile())
                        {
                            character = lpdfile.getCharacter();
                        }
                        if (character != '}')
                        //throw new LexiconException(beginCommentLine + 1);
                        {
                            Token tokenError = new Token();
                            tokenError.simbolo = "serro_comentario";
                            tokenError.line    = beginCommentLine + 1;
                            listTokens.Add(tokenError);
                            return;
                        }
                        character = lpdfile.getCharacter();
                    }
                    if (character == '/')
                    {
                        character = lpdfile.getCharacter();
                        if (character == '*')
                        {
                            int starFlag = 0, beginCommentLine = lpdfile.currentLine;
                            while ((character != '/' || starFlag != 1) && !lpdfile.isEndOfFile())
                            {
                                character = lpdfile.getCharacter();
                                if (character == '*')
                                {
                                    starFlag = 1;
                                    if (!lpdfile.isEndOfFile())
                                    {
                                        character = lpdfile.getCharacter();
                                    }
                                    if (character != '/')
                                    {
                                        starFlag = 0;
                                    }
                                }
                            }
                            if (character != '/')
                            //throw new LexiconException(beginCommentLine + 1);
                            {
                                Token tokenError = new Token();
                                tokenError.simbolo = "serro_comentario";
                                tokenError.line    = beginCommentLine + 1;
                                listTokens.Add(tokenError);
                                return;
                            }
                            character = lpdfile.getCharacter();
                        }
                        else
                        {
                            //throw new LexiconException(lpdfile.currentLine + 1);
                            Token tokenError = new Token();
                            tokenError.simbolo = "serro";
                            tokenError.line    = lpdfile.currentLine + 1;
                            listTokens.Add(tokenError);
                            return;
                        }
                    }
                    while ((character == ' ' || character == '\t') && !lpdfile.isEndOfFile())
                    {
                        character = lpdfile.getCharacter();
                    }
                }
                if (!lpdfile.isEndOfFile())
                {
                    try
                    {
                        token = getToken(lpdfile);
                        listTokens.Add(token);
                        if (token.simbolo == "serro")
                        {
                            return;
                        }
                    }
                    catch (LexiconException ex)
                    {
                        MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    }
                }
            }
        }