- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
编译原理
实验报告
实验名称:词法分析及语法分析
专业班级:
姓名:
学号:
完成日期:
实验一、sample语言的词法分析
一、实验目的
给出SAMPLE文法标准,要求编写SAMPLE语言的词法分析程序。
二、实验准备
了解sample语言单词的定义,选择任一种编程语言实现词法分析。
三、实验内容
给出SAMPLE语言文法,输出单词〔关键字、专用符号以及其它标记〕。
1、格式
输入:源程序文件。输出:关键字、专用符号以及其它标记。
2、实现原理
程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之。
3、实验方法
读懂Sample源代码,自己重点独立实现对常量的判别。
四、实验设计
1、设计SAMPLE语言的词法分析器
A、?字符集定义
1.?字符集?→?字母│数字│单界符
2.?字母?→?A│B│…│Z│a│b│…│z
3.?数字?→?0│1│2│…│9
4.?单界符?→?+│-│*│/│=│││(│)│[│]│:│.?│;?│,?│
?
B、单词集定义
5.单词集?→?保存字│双界符│标识符│常数│单界符
6.保存字?→?and│array│begin│bool│call│case│char│constant│dim│do│else│end│false│for│if│input│integer│not│of│or│output│procedure│program│read│real│repeat│set│stop│then│to│true│until│var│while│write
7.双界符?→?│=│=│:=?│/*│*/│..
8.标识符?→?字母│标识符?数字│标识符?字母
9.常数?→?整数│布尔常数│字符常数
10.整数?→?数字│整数?数字
11.布尔常数?→?true│false
12.字符常数?→??除?{}?外的任意字符串?
2、词法分析系统流程设计
四、源程序清单
1、源代码
/**
*读取测试文件中的每一行然后传入Scaner中扫描
*/
importjava.io.File;
importjava.io.RandomAccessFile;
publicclassAnalyzer{
privateScanerscaner;
privateFiletestFile;
publicstaticfinalStringtestFileAdd=e:\\t7.txt;//测试文件的绝对地址
privateRandomAccessFilefileReandomReader;
publicvoidinitAnalayzer(){
this.scaner=newScaner();
try{
testFile=newFile(testFileAdd);
this.fileReandomReader=newRandomAccessFile(testFile,r);
}catch(Exceptione){
System.out.println(测试文件不存在);
}
}
publicvoidstartAnalyze(){
StringtmpString=;
Stringresult;
introw=0;
System.out.println(······················开始分析·····················);
try{
while((tmpString=this.fileReandomReader.readLine())!=null){
++row;
System.out.println(·····················analyzerow+row
+·················);
//System.err.println(tmpString+!!+row);
result=scaner.scan(tmpString);
System.out.println(result);
scaner.cleanScaner();
tmpString=;
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticv
文档评论(0)