Exemplo n.º 1
0
        /*
         * Operação com caracter
         */
        public void execute(Token token)
        {
            Semantico.GetInstance().pilha_de_tipos.Push(new TpCaracter(false));
            switch (token.Lexeme)
            {
            case "\\space":
            {
                Semantico.GetInstance().codigoGerado.AppendLine("ldstr " + "\" \"");
            }
            break;

            case "\\newline":
            {
                Semantico.GetInstance().codigoGerado.AppendLine("ldstr " + "\"\n\"");
            }
            break;

            case "\\tab":
            {
                Semantico.GetInstance().codigoGerado.AppendLine("ldstr " + "\"\t\"");
            }
            break;;
            }

            //Semantico.GetInstance().codigoGerado.AppendLine("ldstr " + token.Lexeme);
        }
Exemplo n.º 2
0
        private static void PrintSemantico(Semantico s, List <Token.Tok> lt, ExitMode mode)
        {
            StreamWriter sr;

            switch (mode)
            {
            case ExitMode.Console:
                Console.Out.Write("\n\n######Analise Semantica######\n\n");
                sr = new StreamWriter(Console.OpenStandardOutput())
                {
                    AutoFlush = true
                };
                Console.SetOut(sr);
                Console.OutputEncoding = System.Text.Encoding.UTF8;

                PrintArvoreSintatica(lt, sr);
                s.WriteOutput(lt, sr);
                break;

            default:
                Console.Out.Write("Escrevendo AnaliseSemantica.txt\n\n");
                sr = new StreamWriter(@"AnaliseSemantica.txt");
                PrintArvoreSintatica(lt, sr);
                s.WriteOutput(lt, sr);
                sr.Flush();
                sr.Close();
                break;
            }
        }
Exemplo n.º 3
0
        public void executa(string comandos)
        {
            try
            {
                tabResultado.SelectedIndex = 0;
                clearMensagem();
                Stopwatch sw = new Stopwatch();
                sw.Start();
                addMensagem("Executando...");
                Semantico semantico = new Semantico(this);
                Lexico    lexico    = new Lexico(comandos);
                Sintatico sintatico = new Sintatico();
                sintatico.parse(lexico, semantico);
                semantico.Dispose();
                semantico = null;
                sw.Stop();

                Base.getInstance().commit();

                TimeSpan tempo = sw.Elapsed;
                addMensagem(String.Format("Sucesso!!! Tempo de Execução: {0}min {1}s {2}ms", tempo.Minutes, tempo.Seconds, tempo.Milliseconds));
            }
            catch (Exception ex)
            {
                addMensagem("#ERROR: " + ex.ToString());
                //Console.WriteLine(ex.StackTrace);
            }
        }
Exemplo n.º 4
0
        public void execute(Token token)
        {
            var atr = Semantico.GetInstance().DataBase.AtributoTemporario;

            atr.AddRestricao(Semantico.GetInstance().DataBase.RestricaoTemporaria);
            //Semantico.GetInstance().DataBase.TabelaTemporaria.ToString();
        }
Exemplo n.º 5
0
        public void execute(Token token)
        {
            string rotulo = Semantico.GetInstance().rotulos.Last();

            Semantico.GetInstance().codigoGerado.AppendLine("br " + rotulo);
            Semantico.GetInstance().codigoGerado.AppendLine(Semantico.GetInstance().rotulos.Pop() + ":");
        }
Exemplo n.º 6
0
        public void execute(Token token)
        {
            Semantico.GetInstance().codigoGerado.AppendLine("call string [mscorlib]System.Console::ReadLine()");
            Object tipo = Semantico.GetInstance().tabelaSimbolos[Semantico.GetInstance().identificadores[Semantico.GetInstance().identificadores.Count - 1]].tipoIdentificador;

            if (tipo != null)
            {
                if (tipo.GetType() != new TpString(false).GetType())
                {
                    if (tipo.GetType() == new TpInteger(false).GetType())
                    {
                        Semantico.GetInstance().codigoGerado.AppendLine("call int64 [mscorlib]System.Int64::Parse(string)");
                    }
                    //else if (tipo.GetType() == new TpBoolean(false).GetType())
                    //  Semantico.GetInstance().codigoGerado.AppendLine("call bool [mscorlib]System.Boolean::Parse(string)");
                    else if (tipo.GetType() == new TpFloat(false).GetType())
                    {
                        Semantico.GetInstance().codigoGerado.AppendLine("call float64 [mscorlib]System.Double::Parse(string)");
                    }
                    else
                    {
                        throw new SemanticError("Erro na linha " + token.Position + " - tipos inconpatíveis em expressão");
                    }
                }

                Semantico.GetInstance().codigoGerado.AppendLine("stloc " + Semantico.GetInstance().identificadores[Semantico.GetInstance().identificadores.Count - 1]);
            }
            else
            {
                throw new SemanticError("Erro na linha " + token.Position + " - identificador" +
                                        "(" + Semantico.GetInstance().pilha_de_identificadores.Pop() + ")" + " não declarado");
            }
        }
Exemplo n.º 7
0
        private void gerarCodigo()
        {
            if (richTextBox1.Text.Length <= 0)
            {
                abrirArquivos();
            }
            else
            {
                salvarArquivo();
            }

            if (!this.compilado)
            {
                this.compilar();
                if (this.compilado)
                {
                    string diretorio = Path.GetDirectoryName(arquivo) + "\\" + Semantico.GetInstance().NomeArq + ".il";
                    File.Create(diretorio).Dispose();
                    File.WriteAllText(diretorio, Semantico.GetInstance().codigoGerado.ToString());
                    richTextBox2.Clear();
                    richTextBox2.AppendText("código objeto gerado com sucesso");
                }
            }
            else
            {
                string diretorio = Path.GetDirectoryName(arquivo) + "\\" + Semantico.GetInstance().NomeArq + ".il";
                File.Create(diretorio).Dispose();
                File.WriteAllText(diretorio, Semantico.GetInstance().codigoGerado.ToString());
                richTextBox2.Clear();
                richTextBox2.AppendText("código objeto gerado com sucesso");
            }
        }
Exemplo n.º 8
0
 public void execute(Token token)
 {
     Semantico.GetInstance().codigoGerado.AppendLine(".locals( int64 TOPO__BAIXO, int64 TOPO__ALTO)");
     Semantico.GetInstance().OperadorRelacional = token.Lexeme.Trim();
     Semantico.GetInstance().codigoGerado.AppendLine("dup");
     Semantico.GetInstance().codigoGerado.AppendLine("stloc TOPO__BAIXO");
 }
Exemplo n.º 9
0
        private void compilar()
        {
            this.setTextoAreaMensagem("");
            Lexico    lexico    = new Lexico(this.areaEditor.Text);
            Sintatico sintatico = new Sintatico();
            Semantico semantico = new Semantico();

            try
            {
                lexico.analisar();
                sintatico.analisar(lexico, semantico);
                this.setTextoAreaMensagem("programa compilado com sucesso");
            }
            catch (LexicalError e)
            {
                this.setTextoAreaMensagem(e.Message);
            }
            catch (SyntaticError e)
            {
                this.setTextoAreaMensagem(e.Message);
            }
            catch (SemanticError e)
            {
                this.setTextoAreaMensagem(string.Format("Erro: {0}", e.Message));
            }
        }
Exemplo n.º 10
0
        public void execute(Token token)
        {
            /*
             * Faz a comparacao AND
             */
            TpTipo tipo1 = Semantico.GetInstance().pilha_de_tipos.Pop();
            TpTipo tipo2 = Semantico.GetInstance().pilha_de_tipos.Pop();

            if (tipo1.ehIdentificador())
            {
                Semantico.GetInstance().pilha_de_identificadores.Pop();
            }
            if (tipo2.ehIdentificador())
            {
                Semantico.GetInstance().pilha_de_identificadores.Pop();
            }

            if (!(tipo1 is TpBoolean) || !(tipo2 is TpBoolean))
            {
                throw new SemanticError("Tipo incompatível na expressão da linha " + token.Position);
            }
            Semantico.GetInstance().codigoGerado.AppendLine("and");

            Semantico.GetInstance().pilha_de_tipos.Push(new TpBoolean(false));
        }
Exemplo n.º 11
0
 public void execute(Token token)
 {
     if (!Semantico.GetInstance().validaTipoValor(token.Lexeme))
     {
         throw new SemanticError("Erro na linha " + token.Position + " - tipos incompativeis em comando de atribuição");
     }
 }
Exemplo n.º 12
0
        public void execute(Token token)
        {
            string valor = token.Lexeme;
            TpTipo tipo  = Semantico.GetInstance().tipoDoValor(Semantico.GetInstance().tipoIdentificador);

            List <string> listaIds = new List <string>(); // Nesta lista deve estar os nomes das variaveis

//            KeyValuePair<string, Sintatico.Semantico.ItensTabela> it in Semantico.GetInstance().tabelaSimbolos
            foreach (var x in Semantico.GetInstance().pilha_de_identificadores)
            {
                var it = Semantico.GetInstance().tabelaSimbolos[x];
                if (!it.variavelDeclarada)
                {
                    listaIds.Add(x);
                    Semantico.GetInstance().tabelaSimbolos[x].variavelDeclarada = true;
                    Semantico.GetInstance().tabelaSimbolos[x].tipoIdentificador = tipo;
                }
                else
                {
                    throw new SemanticError("Erro na linha " + token.Position + " - identificador (" + x + ") já declarado");
                }
            }

            if (tipo != null)
            {
                declararIds(listaIds, tipo, valor);
            }

            Semantico.GetInstance().pilha_de_identificadores.Clear();
        }
Exemplo n.º 13
0
        public void execute(Token token)
        {
            /*
             * tipo:= pilha.desempilha
             * se(tipo=bool)
             * então pilha.empilha (bool)
             * senão erro semântico: tipo incompatível no operador not, halt
             * código.adiciona (ldc.i4.1)
             * código.adiciona (xor)
             */
            TpTipo tipo = Semantico.GetInstance().pilha_de_tipos.Pop();

            if (tipo.ehIdentificador())
            {
                Semantico.GetInstance().pilha_de_identificadores.Pop();
            }

            if (tipo is TpBoolean)
            {
                Semantico.GetInstance().pilha_de_tipos.Push(new TpBoolean(false));
            }
            else
            {
                throw new SemanticError("Erro na linha " + token.Position + " - Tipos incompatível no operador not");
            }
            Semantico.GetInstance().codigoGerado.AppendLine("ldc.i4.1").AppendLine("xor");
        }
Exemplo n.º 14
0
        public void execute(Token token)
        {
            /*
             * Faz a comparacao OR
             */
            TpTipo tipo1 = Semantico.GetInstance().pilha_de_tipos.Pop();
            TpTipo tipo2 = Semantico.GetInstance().pilha_de_tipos.Pop();

            if (tipo1.ehIdentificador())
            {
                Semantico.GetInstance().pilha_de_identificadores.Pop();
            }
            if (tipo2.ehIdentificador())
            {
                Semantico.GetInstance().pilha_de_identificadores.Pop();
            }

            if (!(tipo1 is TpBoolean) || !(tipo2 is TpBoolean))
            {
                throw new SemanticError("Erro na linha " + token.Position + " - Tipos incompatível ao realizar a comparação (OR)");
            }
            Semantico.GetInstance().codigoGerado.AppendLine("or");

            Semantico.GetInstance().pilha_de_tipos.Push(new TpBoolean(false));
        }
Exemplo n.º 15
0
 public Sintactico(int [,] LR, Rule[] rs)
 {
     TablaLR        = LR;
     Rules          = rs;
     ALexico        = new Lexico();
     ASemantico     = new Semantico();
     ColaSintactica = new Stack();
 }
Exemplo n.º 16
0
        public void execute(Token token)
        {
            Semantico.GetInstance().DataBase.AtributoTemporario.TipoAtributo = new TipoChar(int.Parse(token.Lexeme));
            var atr = Semantico.GetInstance().DataBase.AtributoTemporario;

            Semantico.GetInstance().DataBase.TabelaTemporaria.AddAtributo(atr);
            Semantico.GetInstance().DataBase.AtributoTemporario = null;
        }
Exemplo n.º 17
0
        public void execute(Token token)
        {
            Semantico.GetInstance().DataBase.AtributoTemporario.TipoAtributo = new TipoInteger();
            var atr = Semantico.GetInstance().DataBase.AtributoTemporario;

            Semantico.GetInstance().DataBase.TabelaTemporaria.AddAtributo(atr);
            Semantico.GetInstance().DataBase.AtributoTemporario = null;
        }
Exemplo n.º 18
0
        public void execute(Token token)
        {
            string rotulo = Semantico.GetInstance().geraRotulo();

            Semantico.GetInstance().codigoGerado.AppendLine("br " + rotulo);
            Semantico.GetInstance().codigoGerado.AppendLine(Semantico.GetInstance().rotuloElse.Pop() + ":");
            Semantico.GetInstance().rotuloElse.Push(rotulo);
        }
Exemplo n.º 19
0
 public void execute(Token token)
 {
     Semantico.GetInstance().OperadorAtbr = token.Lexeme.Trim();
     if (Semantico.GetInstance().OperadorAtbr == "+=" || Semantico.GetInstance().OperadorAtbr == "-=")
     {
         string id = Semantico.GetInstance().pilha_de_identificadores.First();
         Semantico.GetInstance().codigoGerado.AppendLine("ldloc " + id);
     }
 }
Exemplo n.º 20
0
        public void execute(Token token)
        {
            var atr = Semantico.GetInstance().DataBase.TabelaTemporaria.UltimoAtributoAdicionado();

            Semantico.GetInstance().DataBase.RestricaoTemporaria.TipoRestricao = 'N';
            Semantico.GetInstance().DataBase.RestricaoTemporaria.Atributo = atr;
            Semantico.GetInstance().DataBase.RestricaoTemporaria.Tabela = atr.Pai;
            atr.AddRestricao(Semantico.GetInstance().DataBase.RestricaoTemporaria);
        }
Exemplo n.º 21
0
 public void execute(Token token)
 {
     /*
      * pilha.empilha(bool)
      * código.adiciona (ldc.i4.1)
      */
     Semantico.GetInstance().pilha_de_tipos.Push(new TpBoolean(false));
     Semantico.GetInstance().codigoGerado.AppendLine("ldc.i4.1");
 }
Exemplo n.º 22
0
        public void execute(Token token)
        {
            /*
             *  pilha.empilha (int64)
             *  código.adiciona(ldc.i8 token.getLexeme)
             */

            Semantico.GetInstance().pilha_de_tipos.Push(new TpInteger(false));
            Semantico.GetInstance().codigoGerado.AppendLine("ldc.i8 " + token.Lexeme);
        }
Exemplo n.º 23
0
 public void execute(Token token)
 {
     /*
      * ação #6:
      * pilha.empilha (float64)
      * código.adiciona(ldc.r8 token.getLexeme)
      */
     Semantico.GetInstance().pilha_de_tipos.Push(new TpFloat(false));
     Semantico.GetInstance().codigoGerado.AppendLine("ldc.r8 " + token.Lexeme);
 }
Exemplo n.º 24
0
        public void execute(Token token)
        {
            /*
             * ação #17:
             * tipo:= pilha.desempilha
             * código.adiciona (call void [mscorlib]System.Console::Write(tipo))
             */
            TpTipo tipo = Semantico.GetInstance().pilha_de_tipos.Pop();

            Semantico.GetInstance().codigoGerado.AppendLine("call void [mscorlib]System.Console::Write(" + tipo + ")");
        }
Exemplo n.º 25
0
 public void update(BaseDeDados Base)
 {
     if (baseAtiva != null)
     {
         baseAtiva.ConexaoAtiva = false;
     }
     Base.ConexaoAtiva        = true;
     baseAtiva                = Base;
     cbDataBases.SelectedItem = Base;
     Semantico.GetInstance().DataBase = Base;
 }
Exemplo n.º 26
0
 public void execute(Token token)
 {
     if (!Semantico.GetInstance().InstanciaBanco.ExisteDataBase(token.Lexeme))
     {
         notificaObservadores(token.Lexeme);
     }
     else
     {
         throw new SemanticError("DataBase ja existe nesta intância do banco", token.Position);
     }
 }
Exemplo n.º 27
0
 public void execute(Token token)
 {
     if (Semantico.GetInstance().DataBase.ExisteTabela(token.Lexeme))
     {
         Semantico.GetInstance().DataBase.RemoveTabela(token.Lexeme);
     }
     else
     {
         throw new SemanticError("Tabela informada não existe nesta base de dados", token.Position);
     }
 }
Exemplo n.º 28
0
 public void execute(Token token)
 {
     try
     {
         Dado d = new Dado(Semantico.GetInstance().DataBase.TabelaTemporaria);
         d.InsereDado();
     }
     catch (Exception)
     {
         throw;
     }
 }
Exemplo n.º 29
0
        private void compilar()
        {
            if (arquivo == "")
            {
                salvarArquivo();
            }

            richTextBox2.Clear();
            Lexico    lexico    = new Lexico();
            Sintatico sintatico = new Sintatico();
            Semantico semantico = null;

            semantico = Semantico.GetInstance();

            lexico.setInput(richTextBox1.Text);
            string arq = Path.GetFileNameWithoutExtension(statusStrip1.Items[1].ToString());

            semantico.NomeArq = arq;
            try
            {
                sintatico.parse(lexico, semantico);
                richTextBox2.AppendText("programa compilado com sucesso");
                this.compilado = true;
                Token t = null;

                /*  richTextBox2.AppendText("linha\t\tclasse\t\t\tlexema"+Environment.NewLine);
                 * while ( (t = lexico.nextToken()) != null )
                 * {
                 *    richTextBox2.AppendText(t.Position + "\t\t"+ t.getTipoToken() +"\t\t" +t.Lexeme +Environment.NewLine);
                 *
                 * }*/
            }
            catch (LexicalError e)
            {
                richTextBox2.Clear();
                richTextBox2.AppendText(" Erro na linha " + e.getPosition() + " - " + e.Message + Environment.NewLine);
            }
            catch (SyntaticError e)
            {
                richTextBox2.Clear();
                richTextBox2.AppendText(" Erro na linha " + e.getPosition() + " - " + e.Message + Environment.NewLine);
            }
            catch (SemanticError e)
            {
                richTextBox2.Clear();
                richTextBox2.AppendText(" Erro na linha " + e.getPosition() + " - " + e.Message + Environment.NewLine);
            }
            catch (Exception e)
            {
                richTextBox2.Clear();
                richTextBox2.AppendText(" Erro não tratado/previsto:  - " + e.Message + Environment.NewLine + e.StackTrace);
            }
        }
Exemplo n.º 30
0
        public void execute(Token token)
        {
            /*
             * Função que inicia o "do", laco de repetição
             * Então é criado um rotulo
             */

            string rotulo = Semantico.GetInstance().gerarNovoRotuloRepeticao();

            Semantico.GetInstance().codigoGerado.AppendLine(rotulo + ": ");
            Semantico.GetInstance().rotuloWhileGerado = rotulo + ": ";
        }