[转载]LCC编译器的源程序分析(31)do while循环语句
来源:互联网 发布:极域电子教室网络锁屏 编辑:程序博客网 时间:2024/05/19 06:18
do—while语句是实现“直到型”循环结构。一般形式如下:
do
{
语句1
}while(表达式)
上面的语句是这样的执行的,先执行一次语句1,然后判断表达式的值,如果表达式的值为真,也就是非零时,返回重新执行语句1,如此反复,直到表达式的值等于0为止。这个表达式与前面一个while语句的区别,就是表达式值的判断和语句1执行先后的问题。前面while语句先判断后执行语句1,而do—while语句是先执行后判断。在LCC里是通过下面的函数dostmt来实现这个语句的处理。
#018 case DO:
#019 dostmt(genlabel(3), swp, lev + 1);
#020 expect(';');
#021 break;
而dostmt函数的代码如下:
#001 static void dostmt(int lab, Swtch swp, int lev)
#002 {
#003 refinc *= 10.0;
#004 t = gettok();
#005 definelab(lab);
#006 statement(lab, swp, lev);
#007 definelab(lab + 1);
#008 expect(WHILE);
#009 expect('(');
#010 definept(NULL);
#011 walk(conditional(')'), lab, 0);
#012 if (findlabel(lab + 2)->ref)
#013 definelab(lab + 2);
#014 }
第4行是获取下一个记号。
第5行是定义第一个标号。
第6行是处理do—while中的语句。
第7行是定义第二个标号。
第8行是测试WHILE是否存在。
第11行处理条件表达式,如果条件不等于0就跳转到第一个标号那里处理。
第12行是查看是否需要生成第三个标号,主要是在循环里跳出来的语句准备的。
生成的代码形式如下:
标号1:语句1
标号2:如果条件表达式不等于0 就跳转到标号1运行
标号3:
它与while循环的区别,就是少了第一个跳转指令的生成。
<script type="text/javascript"><!--google_ad_client = "pub-0904655026211899";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "336699";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_text = "000000";google_color_url = "008000";//--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- LCC编译器的源程序分析(31)do while循环语句
- [转载]LCC编译器的源程序分析(31)do while循环语句
- [转载]LCC编译器的源程序分析(30)while循环语句
- LCC编译器的源程序分析(30)while循环语句
- [转载] LCC编译器的源程序分析(32)for循环语句
- LCC编译器的源程序分析(32)for循环语句
- [转载] LCC编译器的源程序分析(20)复合语句
- [转载]LCC编译器的源程序分析(27)基本语句
- [转载]LCC编译器的源程序分析(28)函数表达式语句
- [转载]LCC编译器的源程序分析(29)if条件语句
- [转载]LCC编译器的源程序分析(33)break语句
- [转载] LCC编译器的源程序分析(34)continue语句
- [转载]LCC编译器的源程序分析(35)switch语句
- [转载]LCC编译器的源程序分析(36)case语句
- [转载]LCC编译器的源程序分析(37)default语句
- [转载]LCC编译器的源程序分析(38)return语句
- [转载]LCC编译器的源程序分析(39)goto语句
- [转载] LCC编译器的源程序分析(61)复合语句的代码块流程
- SQL连接查询类型
- [转载]LCC编译器的源程序分析(27)基本语句
- [转载]LCC编译器的源程序分析(28)函数表达式语句
- [转载]LCC编译器的源程序分析(29)if条件语句
- [转载]LCC编译器的源程序分析(30)while循环语句
- [转载]LCC编译器的源程序分析(31)do while循环语句
- gdb commands
- oracle分区表学习及应用--转帖
- 需求迭代
- [转载] LCC编译器的源程序分析(32)for循环语句
- 营销的一些概念
- linux's coredump storage
- 国美、海尔、第三方网站——揭秘家电B2C三大势力
- 零基础制作【武林外传】辅助工具(一)