示例#1
0
 public FormCompilador()
 {
     InitializeComponent();
     archivo = Archivo.ObtenerInstancia();
 }
        private void IniciarProducciones()
        {
            listaProducciones = new List <Produccion>();

            string[] producciones = Archivo.LeerArchivo("../../gramatica.txt").Split('\n');
            foreach (string produccion in producciones)
            {
                if (!produccion.Equals(""))
                {
                    string[] produccionDividida  = produccion.Split(',');
                    string[] simbolosLadoDerecho = produccionDividida[1].Split(' ');

                    Simbolo[] simbolos = new Simbolo[simbolosLadoDerecho.Length];

                    for (int i = 0; i < simbolos.Length; i++)
                    {
                        simbolos[i] = new Simbolo(simbolosLadoDerecho[i]);
                    }

                    listaProducciones.Add(new Produccion(produccionDividida[0], simbolos));
                }
            }

            Console.WriteLine("--------------PRODUCCIONES--------------");
            foreach (Produccion produccion in listaProducciones)
            {
                Console.WriteLine(produccion.ToString());
            }
            Console.WriteLine("----------------------------------------");

            terminales.Add("start");
            terminales.Add(":");
            terminales.Add("final");
            terminales.Add("juice");
            terminales.Add("xmain");
            terminales.Add("void");
            terminales.Add("->");
            terminales.Add("tint");
            terminales.Add("{");
            terminales.Add("}");
            terminales.Add("give");
            terminales.Add("!");
            terminales.Add("comma");
            terminales.Add("tbool");
            terminales.Add("tfloat");
            terminales.Add("tchar");
            terminales.Add("xid");
            terminales.Add("xvar");
            terminales.Add("xvar1");
            terminales.Add("xvar2");
            terminales.Add("xvar3");
            terminales.Add("xvar4");
            terminales.Add("xvar5");
            terminales.Add("xvar6");
            terminales.Add("xvar7");
            terminales.Add("xvar8");
            terminales.Add("xfun");
            terminales.Add("xfun1");
            terminales.Add("xfun2");
            terminales.Add("xfun3");
            terminales.Add("xfun4");
            terminales.Add("xfun5");
            terminales.Add("xfun6");
            terminales.Add("xfun7");
            terminales.Add("xqcThonk");
            terminales.Add("(");
            terminales.Add(")");
            terminales.Add("xqcWut");
            terminales.Add("=");
            terminales.Add("agane");
            terminales.Add("not");
            terminales.Add("null");
            terminales.Add("true");
            terminales.Add("false");
            terminales.Add("and");
            terminales.Add("or");
            terminales.Add("equals");
            terminales.Add("bigger");
            terminales.Add("lower");
            terminales.Add("biggerOrEqual");
            terminales.Add("lowerOrEqual");
            terminales.Add("+");
            terminales.Add("-");
            terminales.Add("*");
            terminales.Add("/");
            terminales.Add("0");
            terminales.Add("1");
            terminales.Add("2");
            terminales.Add("3");
            terminales.Add("4");
            terminales.Add("5");
            terminales.Add("6");
            terminales.Add("7");
            terminales.Add("8");
            terminales.Add("9");
            terminales.Add("'");
            terminales.Add("a");
            terminales.Add("b");
            terminales.Add("c");
            terminales.Add("d");
            terminales.Add("e");
            terminales.Add("f");
            terminales.Add("g");
            terminales.Add("h");
            terminales.Add("i");
            terminales.Add("j");
            terminales.Add("k");
            terminales.Add("l");
            terminales.Add("m");
            terminales.Add("n");
            terminales.Add("o");
            terminales.Add("p");
            terminales.Add("q");
            terminales.Add("r");
            terminales.Add("s");
            terminales.Add("t");
            terminales.Add("u");
            terminales.Add("v");
            terminales.Add("w");
            terminales.Add("x");
            terminales.Add("y");
            terminales.Add("z");

            noTerminales.Add("PROGRAM");
            noTerminales.Add("BODY");
            noTerminales.Add("RETORNO");
            noTerminales.Add("EXTRA");
            noTerminales.Add("FUNCTION");
            noTerminales.Add("ARGS");
            noTerminales.Add("ARGS2");
            noTerminales.Add("FTYPE");
            noTerminales.Add("TYPE");
            noTerminales.Add("ID");
            noTerminales.Add("EXPRESION");
            noTerminales.Add("CONDICIONAL");
            noTerminales.Add("LLAMADA");
            noTerminales.Add("DECLARACION");
            noTerminales.Add("CICLO");
            noTerminales.Add("CONDICION");
            noTerminales.Add("VALOR");
            noTerminales.Add("BOOL");
            noTerminales.Add("OPERADOR");
            noTerminales.Add("OPERACION");
            noTerminales.Add("EXP");
            noTerminales.Add("EXP1");
            noTerminales.Add("EXP2");
            noTerminales.Add("EXP4");
            noTerminales.Add("EXP3");
            noTerminales.Add("NUM");
            noTerminales.Add("CARACTER");
            noTerminales.Add("LETRA");

            simboloInicial = "PROGRAM";

            foreach (string noTerminal in noTerminales)
            {
                primeros.Add(new Conjunto(noTerminal, ""));
                siguientes.Add(new Conjunto(noTerminal, ""));
            }
        }