1. 1、本文档共65页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lcc

1、数据结构 由于lcc的共享数据结构不多,因此可以很好的处理前端与代码生成之间的数据结构共享。 这样也有不足之处:比较其它简单的设计方法,这些结构更为复杂。 有些人认为是c语言导致这种复杂性,用定义单独结构的方法可以减少这些复杂程度。例如用面向对象语言将结构分割。 * 2、接口 lcc剔除了许多冗余部分并做了简单性假定,一次是的代码很紧凑,但是这些假定限制了接口在其他语言和机器上的应用能力。 lcc接口假定符号和无符号整数以及长整数都具有相同的长度。假定所有指针表示相同。 * 3、语法和语义分析 lcc的语法和语义分析穿插进行。 lcc采用一遍扫描的策略,与AST相比她的开销更小,速度更快。 * 4、代码生成和优化 代码生成需要综合平衡各种因素。功能强大的优化器可以产生更好的代码。但是他的速度太慢了。 就每棵树来说,lcc的指令选择是最佳的。但相邻数的代码边界处就差一些。lcc可以在最后使用窥孔优化解决。 lcc的寄存分配器比较原始,目前可以采用图的着色方法分配能力更为出色,但这样做会使代码多出很多。 * * * 1、表达式 表达式的表示: (a+b)+b*(a+b) * ADD+I ADDRG+P a MUL+I ADD+I INDIR+I INDIR+I ADD+I ADDRG+P b ADDRG+P b INDIR+I INDIR+I INDIR+I ADDRG+P a ADDRG+P b 表达式的分析: c语言的小部分表达式语法: expr: term{+term} term: factor {*factor} factor: ID| ‘(’ expr ‘)’ T(expr) T(term{+term}) T(term)T({+term}) term();T({+term}) term();while(t == ‘+’) {T(+term)} term();while(t == ‘+’) {T(+)T(term)} term();while(t == ‘+’) {t = gettok();T(term)} term();while(t == ‘+’) {t = gettok(); term()} 同理得分析函数term是:factor();while(t == ‘*’) {t = gettok(); factor()} * void factor(){ if(t==ID) t=gettok(); else if (t == ‘(’){ t=gettok(); expr(); expect(‘)’) ; } } c语言表达式分析 赋值表达式: assignment-expression: conditional-expression unary-expression assign-operator assignment-expression Tree expr1(int tok) { static char stop[] = { IF, ID, 0 }; Tree p = expr2(); if (t == =‘ || (prec[t] = 6 prec[t] = 8) || (prec[t] = 11 prec[t] = 13)) { int op = t; t = gettok(); if (oper[op] == ASGN) p = asgntree(ASGN, p, value(expr1(0))); else augmented assignment return p } * 条件表达式: conditonal-expression: binary-expression[? expression : conditional-expression] static Tree expr2(void) { Tree p = expr3(4); if (t == ?) { Tree l, r; Coordinate pts[2]; if (Aflag 1 isfunc(p-type)) warning(%s used in a conditional expression\n, funcname(p)); p = pointer(p); t = gettok(); pts[0] = src; l = pointer(expr(:)); pts[1] = src; r = point

文档评论(0)

sd44055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档