Example #1
0
        public override void EnterExpr([NotNull] ClojureObrParser.ExprContext context)
        {
            //

            /*
             * Console.WriteLine("Вошел в выражение");
             * Console.WriteLine($"Выражение - {context.GetText()}");
             * Console.WriteLine($"--|Текущяя таблица символов :");
             * foreach(var sym in currentSymbolTable.Symbols)
             * {
             *  string symName = sym.Key;
             *  string symVal = sym.Value.Value;
             *  Console.WriteLine($"----|{symName} -- {symVal}");
             * }
             */
            //
        }
Example #2
0
        public override void ExitExpr([NotNull] ClojureObrParser.ExprContext context)
        {
            //
            //Console.WriteLine("Вышел из выражения");
            ExprSymTypes.Put(context, SymType.Fun);
            if (context.children.Count == 1 && ExprSymTypes.Get(context.children[0]) == SymType.Sym)
            {
                ExprSymTypes.Put(context, SymType.Sym);
                Symbol symb = ExprSyms.Get(context.children[0]);
                ExprSyms.Put(context, symb);
            }
            //
            ExprNode node = new ExprNode();

            foreach (var child in context.children)
            {
                var childNode = TypedNodes.Get(child);
                if (childNode != null)
                {
                    switch (childNode.type)
                    {
                    case NodeType.Def:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Cond:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Fun:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.List:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Vector:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Map:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Val:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.Sym:
                        node = (ExprNode)childNode;
                        break;

                    case NodeType.KeyWord:
                        node = (ExprNode)childNode;
                        break;

                    default:
                        break;
                    }
                }
            }

            TypedNodes.Put(context, node);
        }