网站大量收购闲置独家精品文档,联系QQ:2885784924

编译器的设计和实现.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4、标识符识别 case h: case j: case k: case m: case n: case o: case p: case q: case x: case y: case z: case A: case B: case C: case D: case E: case F: case G: case H: case I: case J: case K: case M: case N: case O: case P: case Q: case R: case S: case T: case U: case V: case W: case X: case Y: case Z: id: if (limit - rcp MAXLINE) { cp = rcp - 1; fillbuf(); rcp = ++cp; } assert(cp == rcp); token = (char *)rcp - 1; while (map[*rcp](DIGIT|LETTER)) rcp++; token = stringn(token, (char *)rcp - token); tsym = lookup(token, identifiers); cp = rcp; return ID; 检查是否需要填充buffer 5、其他 另外还有: 数字识别 字符常量和字符串识别 都是有gettok函数实现,实现方法相似。 词法分析器可以有象LEX这样的工具实现。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: bi

文档评论(0)

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

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

1亿VIP精品文档

相关文档