Esempio n. 1
0
        private static void buildPhase1Routine(BnfProduction p)
        {
            Token t = p.ReturnTypeTokens[0];
            bool voidReturn = t.kind == CSharpCCParserConstants.VOID;

            CSharpCCGlobals.PrintTokenSetup(t);
            CSharpCCGlobals.ccol = 1;
            CSharpCCGlobals.PrintLeadingComments(t, ostr);
            ostr.Write("  " + CSharpCCGlobals.staticOpt() + " " + (p.AccessModifier ?? "public") + " ");
            CSharpCCGlobals.cline = t.beginLine;
            CSharpCCGlobals.ccol = t.beginColumn;
            CSharpCCGlobals.PrintTokenOnly(t, ostr);
            for (int i = 1; i < p.ReturnTypeTokens.Count; i++) {
                t = p.ReturnTypeTokens[i];
                CSharpCCGlobals.PrintToken(t, ostr);
            }
            CSharpCCGlobals.PrintTrailingComments(t, ostr);
            ostr.Write(" " + p.Lhs + "(");
            if (p.ParameterTokens.Count != 0) {
                CSharpCCGlobals.PrintTokenSetup(p.ParameterTokens[0]);
                foreach (var token in p.ParameterTokens) {
                    t = token;
                    CSharpCCGlobals.PrintToken(t, ostr);
                }
                CSharpCCGlobals.PrintTrailingComments(t, ostr);
            }
            ostr.Write(") {");
            indentamt = 4;
            if (Options.getDebugParser()) {
                ostr.WriteLine("");
                ostr.WriteLine("    trace_call(\"" + p.Lhs + "\");");
                ostr.Write("    try {");
                indentamt = 6;
            }
            if (p.DeclarationTokens.Count != 0) {
                CSharpCCGlobals.PrintTokenSetup(p.DeclarationTokens[0]);
                CSharpCCGlobals.cline--;
                foreach (var token in p.DeclarationTokens) {
                    t = token;
                    CSharpCCGlobals.PrintToken(t, ostr);
                }
                CSharpCCGlobals.PrintTrailingComments(t, ostr);
            }
            String code = phase1ExpansionGen(p.Expansion);
            dumpFormattedString(code);
            ostr.WriteLine("");
            if (p.IsJumpPatched && !voidReturn) {
                ostr.WriteLine("    throw new InvalidOperationException(\"Missing return statement in function\");");
            }
            if (Options.getDebugParser()) {
                ostr.WriteLine("    } finally {");
                ostr.WriteLine("      trace_return(\"" + p.Lhs + "\");");
                ostr.WriteLine("    }");
            }
            ostr.WriteLine("  }");
            ostr.WriteLine("");
        }
Esempio n. 2
0
 public static void production_addexpansion(BnfProduction p, Expansion e)
 {
     e.Parent    = p;
     p.Expansion = e;
 }
 public static void production_addexpansion(BnfProduction p, Expansion e)
 {
     e.Parent = p;
     p.Expansion = e;
 }