public override void EnterFile([NotNull] ClojureObrParser.FileContext context) { // root = new TreeNode(); Nodes.Put(context, root); // }
static void Main(string[] args) { string filename = "code.txt"; using (StreamReader file = new StreamReader(filename)) { AntlrInputStream inputStream = new AntlrInputStream(file.ReadToEnd()); ClojureObrLexer lexer = new ClojureObrLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); ClojureObrParser parser = new ClojureObrParser(commonTokenStream); ObrErrorListener errorListener = new ObrErrorListener(); parser.AddErrorListener(errorListener); ClojureObrParser.FileContext tree = parser.file(); if (parser.NumberOfSyntaxErrors != 0) { Console.WriteLine($"Syntax is bad :( "); foreach (var error in errorListener.Errors) { Console.WriteLine(error); } Console.ReadKey(); return; } if (R) { ParseTreeWalker walker = new ParseTreeWalker(); ObrListener semantic = new ObrListener(); try { walker.Walk(semantic, tree); } catch (Exception e) { Console.WriteLine($" :( Error: {e.ToString()}"); Console.ReadKey(); return; } var typedRoot = semantic.typedRoot; var options = new JsonSerializerSettings { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }; string typedTree = JsonConvert.SerializeObject(typedRoot, options); File.WriteAllText("typedTree.json", typedTree); GraphProcessor.BuildGraph(semantic.root, "tree"); } } Console.WriteLine("Syntax not so bad :| "); Console.ReadKey(); }
public override void ExitFile([NotNull] ClojureObrParser.FileContext context) { // string fullName = context.GetType().ToString(); int from = fullName.LastIndexOf('+'); string name = fullName.Substring(from + 1, fullName.Length - from - 1).Replace("Context", ""); root.TypeNode = name; root.TextNode = "File"; // var list = new List <ExprNode>(); foreach (var child in context.children) { var node = TypedNodes.Get(child); if (node != null) { var exprNode = (ExprNode)node; list.Add(exprNode); } } typedRoot = new FileNode(list); }