免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C語(yǔ)言解釋器-10 控制結(jié)構(gòu)之循環(huán)

循環(huán)具有類似的結(jié)構(gòu):條件判斷,循環(huán)體。

其基類如下所示:

 public class Loop : ControlFlow    {        public Expression.ExpressionNode Condition;        public virtual Block Body        {            get { return Children.Count > 0 ? Children.Last() as Block : null; }        }        public bool NeedBreak = false;        public bool NeedContinue = false;
 
最簡(jiǎn)單的循環(huán)莫過(guò)于while,或do..while。好了,已經(jīng)將while循環(huán)都列舉了。

先看while循環(huán)的運(yùn)行代碼:

 
public override void Run(Context ctx)        {            Debug.WriteLine("Begin While.");            base.Run(ctx);            while (true)            {                if (Condition != null)                {                    Expression.Operand.Value condVal = Condition.Evaluate(this).GetValue(this);                    Debug.WriteLine(string.Format("Condition: [{0}] = {1}", Condition.ToString(), condVal.ToString()));                    if (condVal.AsInt == 0)                    {                        break;                    }                }                Body.Run(this);                if (NeedBreak)                    break;            } // while            Debug.WriteLine("End While.");        }


do...while與while不同的部分在于,先運(yùn)行循環(huán)體,再運(yùn)行判斷:

public override void Run(Context ctx)        {            Debug.WriteLine("Begin Do...While.");            base.Run(ctx);                        while(true)            {                Body.Run(this);                if (NeedBreak)                    break;                if (Condition != null)                {                    Expression.Operand.Value val = Condition.Evaluate(this).GetValue(this);                    Debug.WriteLine(string.Format("Condition : {0} = {1}", Condition.ToString(), val.ToString()));                    if (val.AsInt == 0)                    {                        break;                    }                }            } // while            Debug.WriteLine("End Do...While.");        }


復(fù)雜一點(diǎn)的是for循環(huán),比其它循環(huán)結(jié)構(gòu)多出初始化部分和迭代部分:

public class ForLoop : Loop    {        public Context Initializer        {            get { return Children.Count > 0 ? Children.First() : null; }        }        public Expression.ExpressionNode Iterator;

 

由于初始化部分可以定義循環(huán)變量,形如:for(int i = 0; ....)。所以,還需要重載以下兩個(gè)方法:

public override bool HasDefined(string str)        {            if (FindByName(str) == null)                return base.HasDefined(str);            else                return true;        }        public override Context FindByName(string str)        {            Context res = null;            if (Initializer != null)            {                Initializer.Parent = null;                res = Initializer.FindByName(str);                Initializer.Parent = this;            }            if (res == null)                return this.Parent.FindByName(str);            else                return res;        }

 

然后就可以確定for循環(huán)的運(yùn)行代碼:

public override void Run(Context ctx)        {            Debug.WriteLine("Begin For.");            if (Initializer != null)                Initializer.Run(this);            base.Run(ctx);            while (true)            {                if (Condition != null)                {                    Expression.Operand.Value val = Condition.Evaluate(this).GetValue(this);                    Debug.WriteLine(string.Format("Condition: [{0}] = {1}", Condition.ToString(), val.ToString()));                    if (val.AsInt == 0)                    {                        break;                    }                }                Body.Run(this);                if (NeedBreak)                    break;                if (Iterator != null)                    Iterator.Evaluate(this);            } // while            if (Initializer != null)            {                Initializer.FreeLocalVariables();            }            Debug.WriteLine("End For.");        }


 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#調(diào)用C/C++動(dòng)態(tài)庫(kù),封裝各種復(fù)雜結(jié)構(gòu)體。
Java 里的 for (;;) 與 while (true),哪個(gè)更快?
行為型模式之解釋器模式
C#自定義PropertyGrid屬性
C#刷遍L(zhǎng)eetcode面試題系列連載(4): No.633 - 平方數(shù)之和
C語(yǔ)言循環(huán)結(jié)構(gòu)(二)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服