编译原理词法分析及语法分析.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

liuzhouzhong + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档