public static string PrintExpr(AstExpr astRoot) { switch (astRoot.m_exprk) { case EXPRK.Binary: { AstBinaryExpr expr = (AstBinaryExpr)astRoot; return("( " + expr.m_tokenkOp.ToString() + " " + PrintExpr(expr.m_leftExpr) + " " + PrintExpr(expr.m_rightExpr) + " )"); } break; case EXPRK.Group: { AstGroupExpr group = (AstGroupExpr)astRoot; return("( " + PrintExpr(group.m_expr) + " )"); } break; case EXPRK.Literal: { AstLiteralExpr expr = (AstLiteralExpr)astRoot; return(expr.m_value.ToString()); } break; case EXPRK.Unary: { AstUnaryExpr expr = (AstUnaryExpr)astRoot; return("( " + expr.m_tokenkOp.ToString() + " " + PrintExpr(expr.m_expr) + " )"); } break; default: { Debug.Fail("Print not implemented for Ast Node type: " + astRoot.m_astnodek); return("<error>"); } break; } }
protected object EvaluateLiteralExpr(AstLiteralExpr expr) { if (HadErrorOrReturn()) { return(null); } return(expr.m_value); }