예제 #1
0
        private void button2_Click(object sender, EventArgs e)
        {
            Ejecucion3d   nuevo = new Ejecucion3d();
            ParseTreeNode raiz  = nuevo.analizar3D1(consola.Text);

            if (raiz != null)
            {
                nuevo.optimizar(raiz);
                consola1.Text = Ejecucion3d.cadenaopti;
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: baf2117/compi2
      private void Ejecutar_Click(object sender, EventArgs e)
      {
          TabPage tabPagex = tabControl1.SelectedTab;

          Consola.Text = "";
          foreach (FastColoredTextBox hijo in tabPagex.Controls)
          {
              String contenido = hijo.Text;
              // contenido = contenido.Replace("\\", "~");
              //contenido = contenido.Replace("\r\n", "&");
              //contenido = contenido.Replace("\n", "&");
              //contenido = contenido.ToLower();
              TS ts = new TS();
              ts.inicio3d();
              Ejecucion3d.Pila.Clear();
              Ejecucion3d.stack.Clear();
              Ejecucion3d.heap.Clear();
              Ejecucion3d.linea.Clear();
              Ejecucion3d.pm = 0;
              Ejecucion3d.am = 0;
              for (int i = 0; i < 100; i++)
              {
                  Ejecucion3d nuevo = new Ejecucion3d();
                  nuevo.valor = "";
                  Ejecucion3d.stack.AddLast(nuevo);
              }
              for (int i = 0; i < 100; i++)
              {
                  Ejecucion3d nuevo = new Ejecucion3d();
                  nuevo.valor = "";
                  Ejecucion3d.heap.AddLast(nuevo);
              }
              TS.TablaSimbolos.Clear();
              TS.errore   = "";
              TS.tipoex   = 0;
              TS.biffalse = false;
              TS.actualc  = null;
              TS.actualM  = null;
              TS.import.Clear();
              TS.importadasgeneral.Clear();
              TS.display.Clear();
              Sintactico1.analizarolc(contenido);
              Ejecucion3d.escribir3d();
              Ejecucion3d eje = new Ejecucion3d();
              eje.analizar3D(Ejecucion3d.cadenota);
              Ejecucion3d.cadenota = "";
              return;
          }
      }
예제 #3
0
파일: Form1.cs 프로젝트: baf2117/compi2
      private void debug_Click(object sender, EventArgs e)
      {
          String        cadena    = tresd.Text;
          _3DG          gramatica = new _3DG();
          LanguageData  lenguaje  = new LanguageData(gramatica);
          Parser        parse     = new Parser(lenguaje);
          ParseTree     arbol     = parse.Parse(cadena);
          ParseTreeNode raiz      = arbol.Root;

          Program.ventana.optimizado.Text = cadena;
          Ejecucion3d ejec = new Ejecucion3d();

          if (raiz != null)
          {
              Ejecucion3d.Pila.Clear();
              Ejecucion3d.stack.Clear();
              Ejecucion3d.heap.Clear();
              Ejecucion3d.pm = 0;
              Ejecucion3d.am = 0;
              for (int i = 0; i < 100; i++)
              {
                  Ejecucion3d nuevo = new Ejecucion3d();
                  nuevo.valor = "";
                  Ejecucion3d.stack.AddLast(nuevo);
              }
              for (int i = 0; i < 100; i++)
              {
                  Ejecucion3d nuevo = new Ejecucion3d();
                  nuevo.valor = "";
                  Ejecucion3d.heap.AddLast(nuevo);
              }
              raiz = ejec.reparar(raiz);
              LinkedList <ParseTreeNode> lista = ejec.linealizar(raiz);
              Debuger deb = new Debuger(lista, cadena);
              deb.Show();
          }
      }
예제 #4
0
        public void ejecutardeb()
        {
            Ejecucion3d ejec   = new Ejecucion3d();
            String      nombre = raiz.ElementAt(0).Term.Name;

            pos = 0;
            ParseTreeNode accion = raiz.ElementAt(pos);

            while (!nombre.Equals("fin"))
            {
                switch (nombre)
                {
                case "ASIGNACIONT":
                    ejec.Asignartempo(accion);
                    pos++;
                    break;

                case "ASIGNAHP":
                    ejec.asignahp(accion);
                    pos++;
                    break;

                case "ASIGNASP":
                    ejec.asignasp(accion);
                    pos++;
                    break;

                case "IF":
                    pos = ejec.IFF(accion, pos);
                    break;

                case "IFFALSE":
                    pos = ejec.IFFA(accion, pos);
                    break;

                case "ASIGNASEL2":
                    //     ejec.asignaselfp2(accion);
                    pos++;
                    break;

                case "ASIGNASEL1":
                    ejec.asignaselfp(accion);
                    pos++;
                    break;

                case "ASIGNADS":
                    //    ejec.asignads(accion);
                    pos++;
                    break;

                case "ASIGNASTACK":
                    ejec.asignastack(accion);
                    pos++;
                    break;

                case "ASIGNAHEAP":
                    ejec.asignaheap(accion);
                    pos++;
                    break;

                case "LLAMADA":
                    pos = ejec.llamada(accion.ChildNodes.ElementAt(0).Token.Text, pos + 1);
                    pos++;
                    break;

                case "GOTO":
                    pos = ejec.gotoo(accion.ChildNodes.ElementAt(1).Token.Text);
                    pos++;
                    break;

                case "IMPRIMIR":
                    ejec.imprimir(accion.ChildNodes.ElementAt(3));
                    pos++;    //por el momento
                    break;

                case "RETORNO":
                    pos        = ejec.regreso();
                    banderaret = false;
                    break;

                default:
                    pos++;
                    break;
                }
                if (pos == raiz.Count)
                {
                    fin = true;
                    goto fin;
                }
                accion = raiz.ElementAt(pos);
                nombre = accion.Term.Name;
                Range rango = new Range(consola, pos);
                consola.Selection      = rango;
                consola.SelectionColor = System.Drawing.Color.Black;
                if (banderalinea && linea == pos)
                {
                    banderalinea = false;
                }
                if (banderaeje && linea == pos)
                {
                    banderaeje = false;
                    debug.Resume();
                }

                if (banderaeje)
                {
                    Thread.Sleep(1000);
                    dibujarStack();
                    dibujarHeap();
                    dibujarPila();
                }


                if (!banderaret && !banderalinea && !banderaeje)
                {
                    debug.Suspend();
                }
            }
            fin :;
        }