}         // NT_Calc

    private static void NT_Expr(out int e)
    {
        int t = 0; e = 0;

        for (;;)
        {
            switch (Syn.Interpret())
            {
            case 0:
                return;

            case 1:
                NT_Term(out e);
                break;

            case 2:
                NT_Term(out t);
                break;

            case 3: // SEM
                e = e + t;
                break;

            case 4:
                NT_Term(out t);
                break;

            case 5: // SEM
                e = e - t;
                break;
            } // switch
        }     // for
    }         // NT_Expr
    }         // NT_Expr

    private static void NT_Term(out int t)
    {
        int f = 0; t = 0;

        for (;;)
        {
            switch (Syn.Interpret())
            {
            case 0:
                return;

            case 1:
                NT_Fact(out t);
                break;

            case 2:
                NT_Fact(out f);
                break;

            case 3: // SEM
                t = t * f;
                break;

            case 4:
                NT_Fact(out f);
                break;

            case 5: // SEM
                t = t / f;
                break;
            } // switch
        }     // for
    }         // NT_Term
    public static void StartSem()
    {
        //-----------------------------------|----------------------------------------
        for (;;)
        {
            switch (Syn.Interpret())
            {
            case 0:
                return;

            case 1:
                NT_Calc();
                break;
            } // switch
        }     // for
    }         // StartSem
    }         // NT_Term

    private static void NT_Fact(out int f)
    {
        f = 0;
        for (;;)
        {
            switch (Syn.Interpret())
            {
            case 0:
                return;

            case 1:
                Lex.GETnumberAttr(out f);
                break;

            case 2:
                NT_Expr(out f);
                break;
            } // switch
        }     // for
    }         // NT_Fact
    }     // CalcSemMethod

    // *** start of global SYN and SEM declarations from ATG ***


    // *** end of global SYN and SEM declarations from ATG ***



    private static void NT_Calc()
    {
        int e = 0;

        for (;;)
        {
            switch (Syn.Interpret())
            {
            case 0:
                return;

            case 1:
                NT_Expr(out e);
                break;

            case 2: // SEM
                Console.WriteLine(e);
                break;
            } // switch
        }     // for
    }         // NT_Calc
Exemplo n.º 6
0
 private int CompileFile(String expression)
 {
     try
     {
         Lex.src = new StringReader(expression);
         //Console.WriteLine("parsing ...");
         Syn.Parse();
         Lex.src.Close();
         Lex.src.Dispose();
         Lex.src = null;
     }
     finally
     {
         if (Lex.src != null)
         {
             Lex.src.Close();
             Lex.src.Dispose();
             Lex.src = null;
         } // if
         Utils.Modules(Utils.ModuleAction.resetModule);
     }     // try/finally to make sure srcFs and srcReader are closed
     return(Utils.EXIT_SUCCESS);
 }         // CompileFile
Exemplo n.º 7
0
    }     // Abort

    private static int CompileFile(String srcFileName)
    {
        FileStream srcFs = null;

        try {
            srcFs = new FileStream(srcFileName, FileMode.Open);
        } catch (Exception) {
            Console.WriteLine("*** file \"{0}\" not found", srcFileName);
            return(Utils.EXIT_FAILURE);
        } // try/catch
        try {
            Lex.src = new StreamReader(srcFs);
            Console.WriteLine("parsing ...");
            Syn.Parse();
            Lex.src.Close();
            Lex.src.Dispose();
            Lex.src = null;
            if (Errors.NumOfErrors() > 0)
            {
                Console.WriteLine("listing ...");
                String     lstFileName = Path.ChangeExtension(srcFileName, ".lst");
                FileStream lstFs       = null;
                try {
                    lstFs = new FileStream(lstFileName, FileMode.Create);
                } catch (Exception) {
                    Utils.FatalError(NAME, "CompileFile", "file \"{0}\" not created", lstFileName);
                    return(Utils.EXIT_FAILURE);
                } // try/catch
                StreamWriter lstWriter = null;
                try {
                    lstWriter = new StreamWriter(lstFs);
                    StreamReader srcFsReader = null;
                    try { // open the source file a second time to generate the error listing
                        srcFsReader = new StreamReader(new FileStream(srcFileName, FileMode.Open));
                        lstWriter.WriteLine(NAME + " (file: \"{0}\")", srcFileName);
                        Errors.GenerateListing(srcFsReader, lstWriter, Errors.ListingShape.longListing);
                    } finally {
                        srcFsReader.Close();
                        srcFsReader.Dispose();
                    } // try/finally
                    Console.WriteLine("{0} error(s) detected", Errors.NumOfErrors());
                } finally {
                    lstWriter.Close();
                    lstWriter.Dispose();
                } // try/finally
            }
            else
            {
                Console.WriteLine("no errors detected");
            }
        } finally {
            if (Lex.src != null)
            {
                Lex.src.Close();
                Lex.src.Dispose();
                Lex.src = null;
            } // if
            Utils.Modules(Utils.ModuleAction.resetModule);
        }     // try/finally to make sure srcFs and srcReader are closed
        return(Utils.EXIT_SUCCESS);
    }         // CompileFile