/// <summary> /// Exit a parse tree produced by <see cref="CalcParser.exp"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitExp([NotNull] CalcParser.ExpContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="CalcParser.exp"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitExp([NotNull] CalcParser.ExpContext context) { return(VisitChildren(context)); }
public override Calc_node VisitExp([NotNull] CalcParser.ExpContext context) { int i = context.ChildCount; if (i == 1) { //node log_exp trig_exp var subtree = context.GetChild(0); return(Visit(subtree)); } else if (i == 2) { // LeftParen RightParen 空括号节点 if (context.LeftParen() != null) { return(new Bracket_node()); } else if (context.Minus() != null) { Calc_node absolute_val = Visit(context.children[1]); absolute_val.fresult = -absolute_val.fresult; absolute_val.result = -absolute_val.result; return(absolute_val); } else { return(null); } } else if (i == 3) { var child = context.GetChild(1); if (child.ChildCount == 0) { // + - * / ^ Binary_node node = new Binary_node(); switch (child.GetText()) { case "+": node.op = Binary_node.Operator.ADD; break; case "-": node.op = Binary_node.Operator.MINUS; break; case "*": node.op = Binary_node.Operator.MULTI; break; case "/": node.op = Binary_node.Operator.DIVIDE; break; case "^": node.op = Binary_node.Operator.EXPO; break; } node.node1 = Visit(context.GetChild(0)); node.node2 = Visit(context.GetChild(2)); return(node); } else { //(exp) return(new Bracket_node { internal_node = Visit(context.GetChild(1)) }); } } else { // will not be executed Unless there is a error throw(new ApplicationException("unexpected ChildCount of ExpContext")); } }