Пример #1
0
        public override void ExitDefine([NotNull] ClojureObrParser.DefineContext context)
        {
            //
            var sym  = context.children[2];
            var expr = context.children[3];

            /*
             * if (ExprSymTypes.Get(sym) != SymType.Sym)
             * {
             *  throw new Exception($"Define requires symbol as second parameter");
             * }
             */
            if (ExprSymTypes.Get(context) == SymType.Sym)
            {
                var symbol = ExprSyms.Get(expr);
                currentSymbolTable.AddSymbol(sym.GetText(), symbol.Value, SymType.Fun);
                //Console.WriteLine($"Значение выражения - {symbol.Value}");
            }
            else
            {
                currentSymbolTable.AddSymbol(sym.GetText(), expr.GetText(), SymType.Fun);
                //Console.WriteLine($"Значение выражения - {expr.GetText()}");
            }
            //Console.WriteLine("Вышел из define");
            //

            var symNode  = (SymNode)TypedNodes.Get(sym);
            var exprNode = (ExprNode)TypedNodes.Get(expr);
            var node     = new DefNode(symNode, exprNode);

            TypedNodes.Put(context, node);
        }
Пример #2
0
        public override void EnterDefine([NotNull] ClojureObrParser.DefineContext context)
        {
            //
            //Console.WriteLine("Вошел в define");
            //Console.WriteLine("Вышел из define");
            var sym  = context.children[2];
            var expr = context.children[3];

            currentSymbolTable.AddSymbol(sym.GetText(), expr.GetText(), SymType.Fun);
            //Console.WriteLine($"Определяемый символ - {sym.GetText()}");
            //
        }