Example #1
0
    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;
        }
    }
Example #2
0
 protected object EvaluateLiteralExpr(AstLiteralExpr expr)
 {
     if (HadErrorOrReturn())
     {
         return(null);
     }
     return(expr.m_value);
 }