词法分析器实验报告.docxVIP

  • 0
  • 0
  • 约8.64千字
  • 约 14页
  • 2026-01-26 发布于江苏
  • 举报

词法分析器实验报告

词法分析器设计

实验目的:

对C语言的一个子集设计并实现一个简单的词法分析器,掌握利用状态转换图设计词法分析器的基本方法。利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词符号二元式的代码,并保存到文件中。

二、实验内容:

1.设计原理

词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号。

理论基础:有限自动机、正规文法、正规式

词法分析器(LexicalAnalyzer)又称扫描器(Scanner):执行词法分析的程序

2.词法分析器的功能和输出形式

功能:输入源程序、输出单词符号

程序语言的单词符号一般分为以下五种:关键字、标识符、常数、运算符,界符

3.输出的单词符号的表示形式:

单词种别用整数编码,关键字一字一种,标识符统归为一种,常数一种,各种符号各一种。

4.词法分析器的结构

5.状态转换图实现

三、程序设计

1.总体模块设计

/*用来存储目标文件名*/

stringfile_name;

/*提取文本文件中的信息。*/

stringGetText();

/*获得一个单词符号,从位置i开始查找。并且有一个引用参数j,用来返回这个单词最后一个字符在str的位置。*/

stringGetWord(stringstr,inti,intj);

/*这个函数用来除去字符串中连续的空格和换行

intDeleteNull(stringstr,inti);

/*判断i当前所指的字符是否为一个分界符,是的话返回真,反之假*/

boolIsBoundary(stringstr,inti);

/*判断i当前所指的字符是否为一个运算符,是的话返回真,反之假*/

boolIsOperation(stringstr,inti);

/*此函数判断传递的参数是否为关键字,是的话,返回真,反之返回假*/

boolIsKey(stringstr);

intmain()

{

cout*********************************************************\n;

cout*************编译原理课程设计--词法编译器ver1.0*********\n;

cout*********************************************************\n;

coutendl;

stringcom1=;

stringcom2=\n;

stringfileline=GetText();

intbegin=0,end=0;

vectorstringarray;

do

{

begin=DeleteNull(fileline,begin);

stringnowString;

nowString=GetWord(fileline,begin,end);

if(end==-1)

break;

if(nowSpare(com1)nowSpare(com2))

array.push_back(nowString);

begin=end+1;

}while(true);

vectorpairint,stringmid_result;

mid_result=analyst(array);

OutFile(mid_result);

cout*********************************************************\n;

cout*程序已完成词法分析,分析结果已经存储在文件file_name中!!!*\n;

cout*********************************************************\n;

cout感谢使用,谢谢再见!endl;

system(pause);

return0;

}

/*提取文本文件中的信息*/

stringGetText()

{

stringfile_name1;

cout请输入源文件名(包括路径和后缀名):;

cinfile_name1;

ifstreaminfile(file_name1.c_str(),ios::in);

if(!inf

文档评论(0)

1亿VIP精品文档

相关文档