private static void DumpGrammar(GrammarInfo grammarInfo) { foreach (var rule in grammarInfo.Rules) { WriteVerbose(); WriteVerbose(rule); } }
static GrammarInfo ReadGrammarInfo(string grammarSpec) { ICharStream stream = new AntlrInputStream(grammarSpec); var lexer = new AntlrV4Tokens(stream); // Setup Parser var cts = new CommonTokenStream(lexer); var parser = new AntlrV4Grammar(cts); var tree = parser.grammarSpec(); var grammarInfo = new GrammarInfo(tree); return(grammarInfo); }
static void WriteGeneratedFiles(string targetDirectory, string baseNamespace, TokenInfo tokenInfo, GrammarInfo grammarInfo) { var syntaxKindModel = new SyntaxKindEnumModel( @namespace: baseNamespace, tokenInfo: tokenInfo, grammarInfo: grammarInfo ); var slotModels = new SlotModels( baseNamespace: baseNamespace, grammarInfo: grammarInfo ); var tokenModel = new TokenModel( tokenInfo: tokenInfo, baseNamespace: baseNamespace); Console.WriteLine(targetDirectory); if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } var context = new CodeGeneratorContext(); WriteSyntaxKind(targetDirectory, syntaxKindModel, context); WriteSyntaxSlots(targetDirectory, slotModels, context); WriteSyntaxNodes(targetDirectory, slotModels, context); WriteSyntaxSlotBuilder(targetDirectory, slotModels, context); WriteSyntaxVisitor(targetDirectory, slotModels, context); WriteSyntaxFactory(targetDirectory, slotModels, context); WriteSyntaxFacts(targetDirectory, tokenModel, context); WriteMetaModel(targetDirectory, slotModels, context); }