[转载]LCC编译器的源程序分析(24)条件表达式
来源:互联网 发布:google编程挑战赛题目 编辑:程序博客网 时间:2024/05/17 21:43
C语言里条件表达式语句如下:
表达式1 ?表达式2 :表达式3
条件运算符要求有三个操作对象,称为三元运算符,它是C语言中唯一的一个三目运算符。比如计算两个值的最大值,就可以写成下面这样:
int nMax = a > b ? a:b;
下面就来看LCC是怎么样处理条件表达式的,它的代码如下:
#001 static Tree expr2(void)
#002 {
#003 Tree p = expr3(4);
#004
第3行里是先处理表达式1(a > b),它是调用expr3函数来实现的,然后返回表达式树p。
#005 if (t == '?')
#006 {
#007 Tree l, r;
#008 Coordinate pts[2];
#009 if (Aflag > 1 && isfunc(p->type))
#010 warning("%s used in a conditional expression/n",
#011 funcname(p));
#012
#013 p = pointer(p);
#014 t = gettok();
#015 pts[0] = src;
#016 l = pointer(expr(':'));
#017 pts[1] = src;
#018 r = pointer(expr2());
#019
#020 if (generic(p->op) != CNST && events.points)
#021 {
#022 apply(events.points, &pts[0], &l);
#023 apply(events.points, &pts[1], &r);
#024 }
#025
#026 p = condtree(p, l, r);
#027 }
#028
#029 return p;
#030 }
第5行是判断这个表达式是否条件表达式。
第16行是递归调用expr函数来处理表达式2(a:),然后返回左子树l。
第18行是递归调用expr2处理表达式3(b),然后返回右子树r。
第26行是构造条件树节点。
通过上面短短30行程序就可以处理条件表达式了。 <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编译器的源程序分析(24)条件表达式
- LCC编译器的源程序分析(24)条件表达式
- [转载]LCC编译器的源程序分析(29)if条件语句
- [转载]LCC编译器的源程序分析(22)基本表达式
- [转载]LCC编译器的源程序分析(23)一元运算表达式
- [转载]LCC编译器的源程序分析(25)赋值表达式
- [转载]LCC编译器的源程序分析(26)逗号表达式
- [转载]LCC编译器的源程序分析(28)函数表达式语句
- [转载]LCC编译器的源程序分析(40)赋值表达式树
- LCC编译器的源程序分析(29)if条件语句
- [转载]LCC编译器的源程序分析(41)赋值表达式的有向无环图
- [转载]LCC编译器的源程序分析(42)赋值表达式的有向无环图
- [转载] LCC编译器的源程序分析(43)赋值表达式的有向无环图
- [转载]LCC编译器的源程序分析(6)词法分析
- [转载]LCC编译器的源程序分析(7)词法分析
- [转载]LCC编译器的源程序分析(9)声明分析
- [转载]LCC编译器的源程序分析(8)语法分析的开始
- [转载]LCC编译器的源程序分析(16)函数的声明
- 终于有了自己的账号
- 新博立,存此证-关于可用性的理解
- Visual C# 2005快速入门之编写方法
- java系统属性取得
- [转载]LCC编译器的源程序分析(23)一元运算表达式
- [转载]LCC编译器的源程序分析(24)条件表达式
- Amazon EC2之初体验(二)
- 互联网创业瞄准Web3.0时代 风投商造梦与毁梦
- 技术布道——全程软件测试
- 17岁女生互联网创业成功秘诀
- [转载]LCC编译器的源程序分析(25)赋值表达式
- 代码检视
- [转载]LCC编译器的源程序分析(26)逗号表达式
- 确保往明确分配的可写空间写入