bool ITemplateContext.WriteVariable(Generator generator, string varName) { bool result = true; switch (varName) { case "usings": language.Usings.Write(generator); break; case "namespace.start": if (ns != null) { generator.Write("namespace ") .WriteLine(ns) .StartBlock(); } break; case "productions": generator.Indent(2); options.TryGet("no_action", out var noAction); if (grammar != null) { grammar.Write(generator, noAction !); } generator.UnIndent(2); break; case "actions": lr1Parser.Actions.Write(generator); break; case "parser.symbols": lr1Parser.WriteSymbols(generator); break; case "scanner": scanner.Write(generator); break; case "scanner.states": scanner.WriteTokenEnum(generator); break; case "namespace.end": if (ns != null) { generator.EndBlock(); } break; case "namespace": generator.Write(ns); break; default: if (options.TryGet(varName, out var value)) { generator.Write(value !); } else { result = false; } break; } return(result); }
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); }