- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[编译原理实验
实验一:简易扫描器的DFA设计与实现
实验原理:词法分析器的工作原理
实验内容:用程序模拟实现一个简易扫描器的工作过程,从输入字符串到分析完以后以(CLASS,VALUE)的标准格式输出
实验要求:
源程序设计语言G[标志符]:
标志符→标志符字母|标志符下划线|标志符数字|字母|下划线
常数→整数
整数→0|非零数字泛整数
泛整数→数字|数字泛整数|ε
关系符→|=|=||=|
字母
→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
非零数字→1|2|3|4|5|6|7|8|9
数字→非零数字|0
能识别下表所列的单词符号:
单词符号 类别编码 类别码的助记符 单词之值 begin 1 BEGIN end 2 END if 3 IF then 4 THEN else 5 ELSE 标识符 6 ID 整数 7 INT 数字串 8 LT = 9 LE = 10 EQ 11 NE 12 GT = 13 GE + 14 ADD - 15 SUB * 16 MUL / 17 DIV ; 18 SEM ( 19 LB ) 20 RB 能跳过源程序中的空白格:两个单词之间的任何空格,制表符,回车,换行都是白空格,除了用来分隔单词以外,没有意义;
能跳过注释:
接连出现的/*到下一次接连出现的*/之间的任何文字都是注释(多行);
从某行接连出现的//到该行的结尾的任何文字都是注释(单行)。
实验步骤:
DFA及相关语义过程;
流程图(或程序的基本框架);
根据实验要求编写一个能够完全遍历整个词法分析程序的输入字符串;
把课本P81程序3-4的函数编写完整。
程序设计指导:
1. 词法分析 (源程序文本文件处理)
1)什么是源程序?
需要被处理的程序叫做源程序。
在这里,源程序就是使用语句文法编写的程序
2)什么是文本文件?
文件每个字节或者若干个字节表示一个字符的文件。
这里强调本次课程设计要求处理保存在文本文件中的源程序。
2.词法分析的“处理”做什么事情?
1)处理文件
读取源文件的内容
标准套路,(参考C语言的文件操作函数,fopen函数等)
2)把源文件的内容分解为词法单元
词法单元就是单词。
单词有类别:
标志符为1类:如ABC,XYZ,dfrg
整数设为2类:如123,900
保留字为3类: IF, THEN, ELSE, WHILE, DO, BEGIN, END
运算符为4类:+,-,*,/,,,=,=,=,,=
分隔符为5类: ;,(,)
白空格不是单词
注释以及注释标记不是单词
怎样编写词法分析程序:
预处理:把源文件一个字符一个字符的读入词法分析程序设置的输入字符结构体数组中(输入缓冲区),读入过程要删除注释,删除多余的白空格;
从源程序字符数组中获得单词, 编码为二元式:
二元式采用结构体数组存储, 把单词类型和词元记录下来。
分解单词的方法:
Case多路转换语句根据单词的特点直接编写;
通过描述单词的正规文法得到相应的有穷自动机,通过case多路转换语句完成有穷自动机的处理流程。参考课本P81的程序。
3.编写词法分析程序要注意的问题:
检查词法是否有错误
检查是否有非法字符:如 @, , !
检查标志符和数字是否满足限制条件
检查注释符号是否配对
界符分隔单词
能够区分两个单词的符号为界符
有些界符不是单词:如白空格
有些界符仅仅用来分隔:如;
有些界符本身还是源程序不可缺少的单词,如(, ), +, /, 等等
有些界符包含两个字符:如, =等等
输出词法错误
如果有错误,需要报告词法错误的原因。并且要能够越过错误,分解下一个单词,直到源程序结束。
输出的二元式流保存在二元式结构体数组中。
实验二:自顶向下分析:LL(1)分析方法
实验原理:语法分析器的工作原理
实验内容:
1、了解语法分析的其中一种自顶向下分析方式LL(1);
2、学会构造LL(1)分析表;
3、上机实现课本P120预测分析器的工作流程。
实验要求:
要求能对下列文法所产生的符号串进行语法分析:
①E?E+T|E-T|T
②T?T*F|T/F|F
③F?(E)|num|id
对输入的符号在分析完之后,如果正确就报告,有误就停止。
实验步骤:
消除文法的左递归(①、②产生式);
对消除左递规后的文法分别求出各FIRST集
文档评论(0)