public static void Analyze() { TabelaDeSimbolos = new TabelaDeSimbolos(); FilaSimbolos = new Queue <Simbolo>(); MaqHip = MaquinaHipotetica.GetInstance(true); EnderecoRelativo = 0; Programa(); }
public static MaquinaHipotetica GetInstance(bool novasInstrucoes = false) { if (_maqHip == null || novasInstrucoes) { _maqHip = new MaquinaHipotetica(); } return(_maqHip); }
public Instrucoes() { InitializeComponent(); var c = MaquinaHipotetica.GetInstance().C; foreach (var item in c.Select((value, i) => new { i, value })) { ListInstrucoes.Items.Add(new ListViewItem { Content = item.i + ". " + item.value }); } }
private void BtnCompilar_Click(object sender, RoutedEventArgs e) { var sourceCode = new TextRange(CodigoFonte.Document.ContentStart, CodigoFonte.Document.ContentEnd).Text; if (sourceCode == "" || sourceCode == "\r\n") { MessageBox.Show("Não há nada para ser compilado!\nPor favor digite um código fonte.", "Atenção!", MessageBoxButton.OK, MessageBoxImage.Information); return; } Lexico.ScanText(sourceCode); if (Lexico.ContemErroLexico) { var erros = Lexico.Tokens.Where(t => t.Tag == SimpleCompiler.Tag.ERRO_LEXICO).ToList(); Console.Text = ErroLexico(erros); } else if (Lexico.Tokens.Any()) { try { Sintatico.Analyze(); var sucesso = "Análise Léxica ✓\r\nAnálise Sintática ✓\r\nAnálise Semântica ✓\r\n\r\nHora: " + DateTime.Now.ToLongTimeString(); Console.Text = sucesso; var janelaInstrucoes = new Instrucoes(); janelaInstrucoes.Show(); Console.Text += "\r\n\r\nExecução:\r\n"; MaquinaHipotetica.GetInstance().ExecutarPrograma(Console); } catch (Exception ex) { if (ex.Message.Contains("#sintatico#")) { Console.Text = ErroSintatico(ex.Message); } else { Console.Text = ErroSemantico(ex.Message); } } } else { var sucesso = "Análise Léxica ✓\r\nApenas Comentários...\r\n\r\nHora: " + DateTime.Now.ToLongTimeString(); Console.Text = sucesso; } }