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}"); * } */ // }
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); }