- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扫描缓冲区 一分为二,互补使用。 搜索指针从单词起点开始搜索,如果遇到半区域的边界,但尚未到达单词的终点时,则可将后续的输入字符装入该缓冲区的另一半。 输入缓冲区两个半区互补功能的实现算法 一、辅助定义式是如下形式的LEX语句: D1 R1 D2 R2 ∶ ∶ Dn Rn 其中: R1,R2,……,Rn 为正则表达式。 D1,D2,……,Dn 为正则表达式名字,称简名字 例:C++标识符 letter A|B|¨¨¨|Z|_ digit 0|1| ¨¨¨|9 iden letter(letter|digit)* 二、识别规则:是一串如下形式的LEX语句: P1 {A1} P2 {A2} ∶ ∶ Pm {Am} Pi :定义在Σ∪{D1,D2,¨¨Dn}上的正规表达式,也称词形。 {Ai}:Ai为语句序列,它指出,在识别出词形为Pi的单词以 后,词法分析器所应作的动作。 其基本动作是返回单词的类别编码和其属性。 * * * * 第三章 词法分析 词法分析的功能 词法分析程序的设计与实现 状态转换图 词法分析程序的自动生成 有限自动机 词法:描述语言的单词符号的文法。 语言的单词符号种类很多,因此需要用不同的词法来描述他们。 3.1 词法分析程序的任务功能及实现方案 思考:词法是哪类文法? 正规文法 定义:编译程序中完成词法分析任务的程序段, 又称词法分析器 词法分析器任务:对源程序进行从左到右的顺序扫描,按照词法规则从中识别出一个个具有独立意义的单词符号并把源程序转换为等价的内部表示形式(属性字流)。 词法分析程序的功能 过滤掉源程序中的注释和空白; 进行预编译工作(对宏进行展开等工作); 符号表操作和错误处理等。 识别出单词(内部表示); 记录读入字符的行号,以便发现错误后能报告出错位置; While ( i != j ) do if (i>j) i=i-j ;//求i,j的差值 词法分析器 ‘while’, ‘(’,‘i’,‘!=’,‘j’, ‘)’, ‘do’, ‘if’, ‘(’,‘i’,‘>’,‘j’, ‘)’, i, =’ , i, ’-’ , j,‘; 实现方案(编译程序中实现方式):基本上有两种 1.词法分析单独作为一遍 2.词法分析程序作为单独的子程序 S.P.(字符串) 词法分析 S.P.(符号串) 语法分析 第一遍 第二遍 单词串 优点: 结构清晰、各遍功能单一 缺点:生成中间文件,效率低 S.P.(字符串) 词法分 析程序 语法分 析程序 取单词 单词 S.P.(字符串) 词法分 析程序 输入缓冲区的处理? 输入缓冲区的处理?显然,无论缓冲区设定为多大,都不能保证单词不会被它的边界打断,若有标识符TEST123,可能在缓冲区中成为: ………………………….TES 在这种情况下,即使读到缓冲区的最后一个字符,但仍不能找到该单词的右边界,这时,若从外存上再读一部分源程序进入缓冲区,则会将没有处理过的字符(TES)冲掉。 两个半区互补使用 为此,我们可将缓冲区分成相等的两个区域: 单词起点 搜索指针 If F at end of first half { reload second half; F++; } Else if F at end of second half { reload first half; move F to beginning of
文档评论(0)