编译原理知识点参考课案.docx

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

第三章 3.1 对于词法分析器的要求 1.词法词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号。 词法分析器(Lexical Analyzer) 又称扫描器(Scanner):执行词法分析的程序。 2.程序语言的单词符号:关键字、标识符、常数、运算符、界符。 3.输出的单词符号的表示形式: (单词种别,单词自身的值) Eg: while (i=j) i--; 输出单词符号: while, - (, - id, 指向i的符号表项的指针 =, - id, 指向j的符号表项的指针 ), - id, 指向i的符号表项的指针 --, - ;, - 4.词法分析器作为一个独立子程序:结构简洁、清晰和条理化,有利于集中考虑词法分析一些枝节问题。 5.词法分析器 3.2 词法分析器的设计 1.词法分析器 2.输入、预处理: 输入串放在输入缓冲区中。 预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符;区分标号区、捻接续行和给出句末符等 扫描缓冲区(指向开始位置,向前搜索确定终点) 3.单词符号的识别、超前搜索: (1)基本字识别 Eg: DO99K=1,10 DO 99 K = 1,10 IF(5.EQ.M)GOTO55 IF (5.EQ.M) GOTO 55 DO99K=1.10 IF(5)=55 需要超前搜索才能确定哪些是基本字 (2)标识符 (3)常数 (4)算符和界符 4.状态转换图(有限方向图) 1结点代表状态 2状态之间用箭弧连结,箭弧上的标记(字符)代表射出结状态下可能出现的输入字符或字符类。 3一个状态转换图可用于识别(或接受)一定的字符串。 5.语法分析的状态转换图 6.状态转换图的实现 思想:每个状态结对应一小段程序。 7.状态转换图实现(了解) 1)ch 字符变量、存放最新读入的源程序字符 2)strToken 字符数组,存放构成单词符号的字符串 3)GetChar 子程序过程,把下一个字符读入到 ch 中 4)GetBC 子程序过程,跳过空白符,直至 ch 中读入一非空白符 5)Concat 子程序,把ch中的字符连接到 strToken 6)IsLetter和 IsDisgital 布尔函数,判断ch中字符是否为字母和数字 7) Reserve 整型函数,对于 strToken 中的字符串查找保留字表,若它是保留字则给出它的编码,否则回送0 8) Retract 子程序,把搜索指针回调一个字符位置 9)InsertId 整型函数,将strToken中的标识符插入符号表,返回符号表指针 10)InsertConst 整型函数过程,将strToken中的常数插入常数表,返回常数表指针。 8.一个词法分析器的例子(多看看、了解吧): int code, value; strToken := “ ”; /*置strToken为空串*/ GetChar(); GetBC(); if (IsLetter()) begin while (IsLetter() or IsDigit()) begin Concat(); GetChar(); end Retract(); code := Reserve(); if (code = 0) begin value := InsertId(strToken); return ($ID, value); end else return (code, -); end else if (IsDigit()) begin while (IsDigit()) begin Concat( ); GetChar( ); end Retract(); value := InsertConst(strToken); return($INT, value); end else if (ch =‘=’) return ($ASSIGN, -); else if (ch =‘+’) return ($PLUS, -); else if (ch =‘*’) begin GetChar(); if (ch =‘*’) return ($POWER, -); Retract(); return ($STAR, -); end else if (ch =‘;’) return ($SEMICOLON, -); else if (ch =‘(’) return ($LPAR, -); else if (ch =‘)’) return ($RPAR, -); else ProcError( ); /* 错误处理*/ 3.3正规表达式和有限自

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档