コード例 #1
0
 public override void EnterFile([NotNull] ClojureObrParser.FileContext context)
 {
     //
     root = new TreeNode();
     Nodes.Put(context, root);
     //
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: kolmosckvich/Compilers
        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();
        }
コード例 #3
0
        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);
        }