Example #1
0
        bool IVarProvider.AddVarValue(Generator generator, string varName)
        {
            bool result = true;

            switch (varName)
            {
            case "usings":              generator.Write(parser.Usings);    break;

            case "namespace.start":
                if (parser.Language.Namespace != null)
                {
                    generator.WriteLine("namespace {0}", parser.Language.Namespace)
                    .Write("{")
                    .Indent();
                }
                break;

            case "productions":
                generator.Indent(2);
                options.TryGetValue("no_action", out var noAction);
                prods.Write(generator, noAction);
                generator.UnIndent(2);
                break;

            case "actions":                 lr1Parser.Actions.Write(generator); break;

            case "parser.symbols":          lr1Parser.WriteSymbols(generator); break;

            case "scanner":                 scannerWriter.Write(generator); break;

            case "scanner.states":          dfa.WriteTokenEnum(generator); break;

            case "namespace.end":
                if (parser.Language.Namespace != null)
                {
                    generator.EndBlock();
                }
                break;

            case "namespace":               generator.Write(parser.Language.Namespace); break;

            default:
                if (options.TryGetValue(varName, out var value))
                {
                    generator.Write(value);
                }
                else
                {
                    result = false;
                }
                break;
            }
            return(result);
        }