[转载]LCC编译器的源程序分析(25)赋值表达式
来源:互联网 发布:google编程挑战赛题目 编辑:程序博客网 时间:2024/05/17 22:54
C语言是非常强大的,可以连续赋值的操作。将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式的形式出现在其它语句中,这是C语言灵活性的一种表现。
变量 赋值运算符 表达式
上面就是赋值表达式的组成,如下面的例子:
x = y = 2+8;
这样的赋值表达式在LCC里是通过函数expr1来实现的。
#001 Tree expr1(int tok)
#002 {
#003 static char stop[] = { IF, ID, 0 };
#004
#005 Tree p = expr2();
#006
第5行是处理第一表达式,比如上面的例子里的y。
#007 if (t == '='
#008 || (prec[t] >= 6 && prec[t] <= 8)
#009 || (prec[t] >= 11 && prec[t] <= 13))
#010 {
#011 int op = t;
#012 t = gettok();
#013 if (oper[op] == ASGN)
#014 {
#015 p = asgntree(ASGN, p, value(expr1(0)));
#016 }
#017 else
#018 {
#019 expect('=');
#020 p = incr(op, p, expr1(0));
#021 }
#022 }
#023
#024 if (tok)
#025 test(tok, stop);
#026
#027 return p;
#028 }
第7行是判断右边是否有赋值表达式,或者其它表达式。比如y = 2+8。
第13行判断右边是否赋值表达式,如果是赋值表达式就生成赋值树,当然它还调用expr1来处理后面的表达式的。
第19行和第20行是处理复合的赋值表达式。
由于处理赋值表达式是右结合的,所以要先递归地计算后面的表达式再生成树节点。
<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编译器的源程序分析(25)赋值表达式
- [转载]LCC编译器的源程序分析(40)赋值表达式树
- LCC编译器的源程序分析(25)赋值表达式
- [转载]LCC编译器的源程序分析(41)赋值表达式的有向无环图
- [转载]LCC编译器的源程序分析(42)赋值表达式的有向无环图
- [转载] LCC编译器的源程序分析(43)赋值表达式的有向无环图
- LCC编译器的源程序分析(40)赋值表达式树
- [转载]LCC编译器的源程序分析(22)基本表达式
- [转载]LCC编译器的源程序分析(23)一元运算表达式
- [转载]LCC编译器的源程序分析(24)条件表达式
- [转载]LCC编译器的源程序分析(26)逗号表达式
- [转载]LCC编译器的源程序分析(28)函数表达式语句
- LCC编译器的源程序分析(41)赋值表达式的有向无环图
- LCC编译器的源程序分析(42)赋值表达式的有向无环图
- LCC编译器的源程序分析(43)赋值表达式的有向无环图
- [转载]LCC编译器的源程序分析(6)词法分析
- [转载]LCC编译器的源程序分析(7)词法分析
- [转载]LCC编译器的源程序分析(9)声明分析
- [转载]LCC编译器的源程序分析(24)条件表达式
- Amazon EC2之初体验(二)
- 互联网创业瞄准Web3.0时代 风投商造梦与毁梦
- 技术布道——全程软件测试
- 17岁女生互联网创业成功秘诀
- [转载]LCC编译器的源程序分析(25)赋值表达式
- 代码检视
- [转载]LCC编译器的源程序分析(26)逗号表达式
- 确保往明确分配的可写空间写入
- C#获取当前项目路径
- 为了,做一个合格的程序员开始写BLOG!
- SQL连接查询类型
- [转载]LCC编译器的源程序分析(27)基本语句
- [转载]LCC编译器的源程序分析(28)函数表达式语句