- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法分析及词法分析程序*词法分析的任务*词法分析的任务扫描输入串中的字符,从中识别出具有独立意义的基本语法单位:单词,生成单词序列。剥去源程序中的注释(块、行)和“空白”符预处理——宏处理与文件包含词法分析程序亦称为扫描器设计和实现扫描器的相关问题:描述语言中各种单词的结构:3型文法及其正规式识别源程序中的各个单词:状态转换图或有限自动机单词(流)token高级语言源程序编译器其它阶段get_next_token字符流符号表扫描器的功能词法分析器语法分析器*程序语言的单词(1)单词:同类词文的总称词文:源程序中能匹配某一记号的字符串模式:描述用字符串构成单词的规则单词词文模式关键字WHILEwhilewhileFORforfor标识符IDtemp, i,max字母开头的字母数字串常数NUM3.14100数字串{.数字串}*程序语言的单词(2)单词词文模式运算符MUL**GT界符,,,串常量STRING“hello”‘there’双(单)引号中间的字符串(不包括引号本身)*3.1 设计扫描器时应考虑的问题3.1.1 词法分析的两种处理方式将词法分析纳入到语法分析中进行词法分析与语法分析分开来进行描述单词结构比描述语法结构简单,仅用3型文法就够了;将单词识别从语法分析中分离出来,可采用更有效的工具(状态转移图、有限自动机等)实现;有些语言(如FORTRAN)的单词识别与前后文相关,将词法分析独立出来,有利于实现统一的语法分析;使编译程序各部分独立出来,有利于设计、调试和维护逻辑上的划分,不是指编译程序的执行流程* 两种具体的实现方式词法分析作为单独的一遍(多遍扫描) ①大部分编译时间花在扫描字符上,独立出来便于集中处理. ②单词的词法规则简单,可建立特别适用于这种文法的有效技术,实现词法分析的自动生成. ③整个编译程序结构简单,清晰,产生中间文件,占内存.词法分析作为一个独立的子程序,供语法分析程序调用 (单遍扫描) ①语法分析调用时,返回一个单词符号. ②无中间文件,省内存,编译效率高.*3.1.2 单词符号的内部表示 —词法分析器的输出形式(1) 单词符号的种类 ①保留字:如begin,end,do等用户不能使用 ②标识符:由用户定义 ③无符号整数:如124 ④单字符分界符:+,-,*,/ ,;,,, ( ,),: ⑤双字符分界符://,/*,*/,:=等* (2)单词符号的表示形式——二元组 二元组:(单词类别,单词自身值) ①单词类别:说明单词属于哪一类,常用助记符或 整数编码表示. 例:标识符用4 表示 ′+ ′用8表示 ′* ′用10表示②单词自身值 一种类只有一个单词,不必给出单词自身值.因为 根据类别编码能完全确定. 一种类含有多个单词,必须给出单词自身值予以 区别。* 一般: ①保留字、运算符和分界符都是一个符号一种类别,不需单词自身值. 如 ′+ ′类别8, ′+ ′的二元组 (8,-) ②标识符整体作为一个类别,其单词自身值采用自身的字符串编码表示. 如标识符类别为5,‘AB’的二元组(5,‘AB’) ③常数按类型分类别:单词自身值采用自身 的二进制形式. 如整数类别为20,整数4的二元组(20,100)*3.1.3 识别标识符的若干约定和策略约定:(1)标识符中的字符个数超过最大允许长度,截去尾部.(2)不超过最大长度的标识符,则按“尽可能长”的原则匹配.如:如果标识符最大长度为6,则identifier识别为identi,而不是identifier; 而NO23A可识别出NO23A标识符,而不是NO、23和A**禁止关键字作为标识符的前缀的语言系统(如标准FORTRAN和PASCAL)DO10I会识别为DO 10 I,而不是将之识别为一个标识符。若允许关键字作为标识符的前缀(非标准FORTRAN) ①DO99K=1,10 DO循环语句 ②DO99K=1.10 变量赋值 ③IF(5.EQ.M)X=5 IF语句 ④IF(5)=55 函数赋值单词符号的识别——超前扫描技术*超前扫描技术:在无法判别和识别当前单词时,先向前扫描若干个字符,直到可以进行判断和识别为止。嵌套括号的分层由外向内编号:第一层,第二层,……语句内容的分层按包含它的括号层次确定不被括号包含的语句内容称为属于第零层不被括号包含的等号和逗号分别称为零层等号和零层逗号利用超前扫描到的零层等号和零层逗号来识别单词符号超前扫描技术示例 ①DO99K=1,10 DO循环语句 ②DO99K=1.10变量赋值 ③IF(5.EQ.M)X=5 IF语句 ④IF(5)=55函数赋值包含零层等号的语句:赋值语句、DO语句、函数定义语句以及某些逻辑IF语句既包含零层等号,也包含零层逗号的语句:D
文档评论(0)