Exemple #1
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");
            }
        }
        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));
        }
Exemple #3
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);
        }
        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));
        }
Exemple #5
0
        public void execute(Token token)
        {
            var atr = Semantico.GetInstance().DataBase.AtributoTemporario;

            atr.AddRestricao(Semantico.GetInstance().DataBase.RestricaoTemporaria);
            //Semantico.GetInstance().DataBase.TabelaTemporaria.ToString();
        }
 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");
 }
        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");
            }
        }
Exemple #8
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");
     }
 }
        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();
        }
Exemple #10
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() + ":");
        }
        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");
        }
Exemple #12
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;
        }
Exemple #13
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;
        }
        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);
        }
Exemple #15
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);
        }
Exemple #16
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);
     }
 }
 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");
 }
Exemple #18
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);
        }
Exemple #19
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);
 }
Exemple #20
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);
     }
 }
Exemple #21
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 + ")");
        }
Exemple #22
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);
     }
 }
Exemple #23
0
 public void update(BaseDeDados Base)
 {
     if (baseAtiva != null)
     {
         baseAtiva.ConexaoAtiva = false;
     }
     Base.ConexaoAtiva        = true;
     baseAtiva                = Base;
     cbDataBases.SelectedItem = Base;
     Semantico.GetInstance().DataBase = Base;
 }
        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 + ": ";
        }
Exemple #25
0
 public void execute(Token token)
 {
     try
     {
         Dado d = new Dado(Semantico.GetInstance().DataBase.TabelaTemporaria);
         d.InsereDado();
     }
     catch (Exception)
     {
         throw;
     }
 }
Exemple #26
0
 public void execute(Token token)
 {
     if (!Semantico.GetInstance().DataBase.TabelaTemporaria.ExisteColuna(token.Lexeme))
     {
         Semantico.GetInstance().DataBase.AtributoTemporario = new Atributo
                                                                   (token.Lexeme, Semantico.GetInstance().DataBase.TabelaTemporaria);
     }
     else
     {
         throw new SemanticError("Coluna já foi informada anteriormente", token.Position);
     }
 }
Exemple #27
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);
            }
        }
Exemple #28
0
        public void execute(Token token)
        {
            var nomebase = (from e in Semantico.GetInstance().InstanciaBanco.DataBases where token.Lexeme.Equals(e.Nome) select e).FirstOrDefault();

            if (nomebase != null)
            { //base encontrada
                notificaObservadores(nomebase);
            }
            else
            {
                throw new SemanticError("DataBase ainda não foi criada!", token.Position);
            }
        }
Exemple #29
0
        public void execute(Token token)
        {
            Semantico.GetInstance().DataBase.AtributoTemporario = Semantico.GetInstance().DataBase.TabelaTemporaria.RecuperarAtributoPorNome(token.Lexeme);

            if (Semantico.GetInstance().DataBase.AtributoTemporario != null)// encontrou
            {
                Semantico.GetInstance().DataBase.AtributoTemporario.OrdemInsercao = ordemInsercao++;
            }
            else
            {
                throw new SemanticError($"campo {token.Lexeme} informado no insert não foi encontrado na tabela", token.Position);
            }
        }
Exemple #30
0
        public void execute(Token token)
        {
            Semantico.GetInstance().DataBase.TabelaReferenciada = Semantico.GetInstance().DataBase.RecuperarTabelaPorNome(token.Lexeme);
            var tab = Semantico.GetInstance().DataBase.TabelaReferenciada;

            if (tab != null)
            {
                Semantico.GetInstance().DataBase.RestricaoTemporaria.TipoRestricao = 'F'; //Gambi Foreign
            }

            else
            {
                throw new SemanticError("Tabela informa na reestrição não existe nesta base de dados", token.Position);
            }
        }