private Node CreateNode(GravisParser.Node_defContext context) { var node = new Node(); if (context.input_def() != null) { if (subspaceStack.Count != 0) { var subspace = subspaceStack.Peek(); subspace.input = node; } node.type = NodeType.Input; node.text = "I"; } else if (context.output_def() != null) { if (subspaceStack.Count != 0) { var subspace = subspaceStack.Peek(); subspace.output = node; } node.type = NodeType.Output; node.text = "O"; } else if (context.const_def() != null) { node.type = NodeType.Constant; node.text = context.const_def().NUMBER().GetText(); } else if (context.if_def() != null) { node.type = NodeType.If; node.text = context.if_def().comp_op().GetText(); } else if (context.opr_def() != null) { node.type = NodeType.Operator; node.text = context.opr_def().arith_op().GetText(); } else if (context.subspace_def() != null) { node.type = NodeType.Subspace; node.text = "S"; var subspace = new Subspace(node); subspaces.Add(subspace); subspaceStack.Push(subspace); } else if (context.self_subspace_def() != null) { node.type = NodeType.SelfSubspace; node.text = "S"; } else { node.text = "?"; } nodes.Add(node); return(node); }
/// <summary> /// Exit a parse tree produced by <see cref="GravisParser.node_def"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitNode_def([NotNull] GravisParser.Node_defContext context) { }