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)); }
/* * 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)); }
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"); } }
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(); }
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"); }
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; }
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); }
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); }
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"); }
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); }
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); }
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); } }
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 + ")"); }
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); } }
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 + ": "; }
public void execute(Token token) { try { Dado d = new Dado(Semantico.GetInstance().DataBase.TabelaTemporaria); d.InsereDado(); } catch (Exception) { throw; } }
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); } }
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); } }
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); } }
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); } }
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); } }