示例#1
0
 public static void Analyze()
 {
     TabelaDeSimbolos = new TabelaDeSimbolos();
     FilaSimbolos     = new Queue <Simbolo>();
     MaqHip           = MaquinaHipotetica.GetInstance(true);
     EnderecoRelativo = 0;
     Programa();
 }
示例#2
0
 public static MaquinaHipotetica GetInstance(bool novasInstrucoes = false)
 {
     if (_maqHip == null || novasInstrucoes)
     {
         _maqHip = new MaquinaHipotetica();
     }
     return(_maqHip);
 }
示例#3
0
        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
                });
            }
        }
示例#4
0
        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;
            }
        }