解譯器模式(Robot pattern)

來源:互聯網
上載者:User

 

namespace DesignPattern.Interpreter 

    public abstract class Expression 
    { 
        public abstract bool Interpret(); 
    } 
 
    public class Constant : Expression 
    { 
        private bool m_val; 
 
        public Constant(bool val) 
        { 
            this.m_val=val; 
        } 
 
        public override bool Interpret() 
        { 
            return this.m_val; 
        } 
 
        public override string ToString() 
        { 
            return this.m_val.ToString(); 
        } 
    } 
 
    public class And : Expression 
    { 
        public Expression left,right; 
         
        public And(Expression left,Expression right) 
        { 
            this.left=left; 
            this.right=right; 
        } 
 
        public override bool Interpret() 
        { 
            return left.Interpret()&&right.Interpret(); 
        } 
 
        public override string ToString() 
        { 
            return "("+this.left.ToString()+" && "+this.right.ToString()+")"; 
        } 
    } 
 
    public class Or : Expression 
    { 
        public Expression left,right; 
         
        public Or(Expression left,Expression right) 
        { 
            this.left=left; 
            this.right=right; 
        } 
 
        public override bool Interpret() 
        { 
            return left.Interpret()||right.Interpret(); 
        } 
 
        public override string ToString() 
        { 
            return "("+this.left.ToString()+" || "+this.right.ToString()+")"; 
        } 
    } 
 
    public class Not : Expression 
    { 
        private Expression exp; 
 
        public Not(Expression exp) 
        { 
            this.exp=exp; 
        } 
 
        public override bool Interpret() 
        { 
            return !exp.Interpret(); 
        } 
 
        public override string ToString() 
        { 
            return "(! "+exp.ToString()+")"; 
        } 
    } 
 
    public class Client 
    { 
        public static void Main() 
        { 
            Expression exp=new Or(new And(new Constant(true),new Constant(false)), 
            new And(new Constant(true),new Not(new Constant(false)))); 
            Console.WriteLine(exp.ToString()+"="+exp.Interpret()); 
        } 
    } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.