cha4词法分析white

cha4词法分析white

ID:40838568

大小:1.98 MB

页数:111页

时间:2019-08-08

cha4词法分析white_第1页
cha4词法分析white_第2页
cha4词法分析white_第3页
cha4词法分析white_第4页
cha4词法分析white_第5页
资源描述:

《cha4词法分析white》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第三章词法分析设计词法分析程序单词的描述工具(正规表达式)单词的识别工具(有限自动机)4.1对于词法分析器的设计4.2单词的描述工具4.3有穷自动机4.4正规式和有穷自动机的等价性4.5正规文法和有穷自动机的等价性4.6词法分析程序的自动构造工具本章练习作业课程目录9/15/20211词法分析(lexicalanalysis)p38主要任务从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序或者说:逐个读入源程序字符,并按照词法规则分割成一系列单词,再转换成单词串,同时进行词法检查章节目录9/15/2021

2、24.1对于词法分析器的要求p50功能:输入源程序,输出单词符号单词符号一般可分为下列五种:关键字C语言mainintvoid标识符变量名数组名函数名常数1003.14159‘a’运算符+-*/界符,;()/**/9/15/20213单词符号的输出形式p50二元式(单词种别,单词自身的值)单词种别单词符号的特性,是语法分析需要的信息通常用整数编码,怎样分种,怎样编码,主要取决于处理上的方便例关键字一字一种main第1种助忆符为“main”int第2种“int”……标识符统归为一种第6种“ID”常数(整)统归为一种第7中“INT”9/15/20214属性值单词符

3、号特性的值一个种别只含一个单词符号,不需属性值关键字main(main,_)一个种别含有多个单词符号,为区别各个单词符号需要属性值表示方法常用常数的值,标识符的名字表示变量i(ID,指向i的符号表项的指针)单词符号的输出形式p51二元式(单词种别,属性值)9/15/20215例C++代码段及对应的单词符号序列p38while(i>=j)i--;单词输出表示1while(while,_)2(((,_)3i(ID,指向i的符号表项的指针)4>=(>=,_)5j(ID,指向j的符号表项的指针)6)(),_)7i(ID,指向i的符号表项的指针)8--(--,_)9;(

4、;,_)9/15/20216词法分析器的组织方法p50作为单独的一遍,在语法分析前进行与语法分析结合在一起作为一遍作为语法分析程序的一个子程序,每次调用识别一个单词,交给语法分析器使用词法分析表格管理语法分析源程序送单词符号表常数表取单词语法树章节目录下一节9/15/20217词法分析器的设计作为单独一遍考虑输入:输入串放在输入缓冲区main()预处理作用剔掉源程序中无实质意义字符滤掉空格(空格字符字符串中空格除外)滤掉回车符和换行符跳过注释9/15/20218单词符号的识别:超前搜索main()起点指示器搜索指示器超前搜索:标识符、常数和一些特殊算符、界符的

5、识别需要向前扫描一个字符才能被识别出来例x=30*y中常数30的识别120对标识符和常数的长度实际上必须加以限制,否则,即使缓冲区再大也无济于事9/15/20219单词的识别──状态转换图状态转换图有限方向图结点——状态,用○表示;终态,用◎表示有向弧──箭头弧上标记──输入字符标识符的状态转换图字母字母或数字其它初态*终态多读进了一个不属于标识符部分的字符已识别出一个标识符0129/15/202110例C语言无符号整数的描述识别非零开头的十进制数的状态转换图01-910-9其它2*十进制整数09/15/202111对简 单语 言进 行词 法分 析的 状态 转

6、换 图0空白字母1字母或数字其它2*标识符数字3数字其它4*十进制整数=5=+6+*非*8*乘号*9**乘幂……)12)其它13出错用来识别p42表3.1中的单词符号79/15/202112利用状态转换图识别单词1.从初态出发2.读入一字符3.按当前字符转入下一状态4.重复2,3直到无法继续转移5.若当前状态是终止状态,说明读入的字符组成一单词;否则,说明输入不符合词法规则9/15/202113词法分析器的设计主要步骤首先画出词法分析的状态转换图然后编制词法分析子程序scan()完成以下功能:从输入流读取下一个单词返回:单词种别(code)属性值(value)

7、9/15/202114词法分析器的流程图P19开始略过空格和回车是字母y组合标识符查保留字表是否查到y保留字结束n自定义标识符n是数字y组合常数n特殊符号?y特殊符号n出错9/15/202115词法分析器的实现__所需变量和过程1ch字符变量,存放最新读进的源程序字符2strToken字符数组,存放构成单词符号的字符串例如strToken=“AB”3GetChar读入字符过程,将下一个输入字符读到ch中,搜索指示器前移一个字符位置4GetBC判断ch中字符是否为空白。若是,则调用GetChar直至ch中进入一个非空白字符例如ch=‘C’5Concat组合符号过

8、程,将ch中的字符连接到strToke

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。