编译原理课程设计词法分析器文档(附详细代码分析。)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//关键字///////////
string kt[36] ={"char","short","int","unsigned","long","float","double","struct","union","void",
"enum","const","typedef","auto","static","break","case","continue","default","do","else","for","if",
实验代码
///////////////////////////////////////////词法分析程序@zhangjinrong//////////////////////////////////////////////////
/////////头文件////////////
#include <iostream>
"return","switch","while","sizeof","printf","FILE","fopen","NULL",
"fclose","exit","read","close","fprintf"};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
为了分析大于4kb的程序本程序使用了著名的双缓冲技术。设计思想如下
4.状态转换图如下
5.实验工具
Vc++6.0,win7画图工具,
6.实现函数
void get_char (); //用于从buffer读取一个字符到C
int letter (int C); //判断是否是字母
int digit (int C); //判断时候是数字或者小数点
理解状态转换图及其实现。一个状态转换图可用于识别(或接受)一定的字符。大多数程序语言的单词符号都可以用转换图予以识别。转换图非常易于用程序实现,最简单的办法是让每个状态结对应一小段程序。
能够编写简单的词法分析器。
2.课程设计的要求
手工构造一个简单的词法分析程序,能够识别标识符、整数、关键字、算符、界符。
int underline (int C); //判断时候是下划线
int reserve (string token); //判断时候是关键字
void retract (); //向前指针向后退一个
void returnout (string str1,string str2); //文件打印
7.结果及测试分析
实现状态转换图。从以下方法中选一:
直接Hale Waihona Puke Baidu向法
表驱动法
四、选做实验
☻使用缓冲技术
3.课程设计内容
程序语言的单词符号一般可分为下列五种。
(1)关键字
是由程序语言定义的具有固定意义的标志符。本程序定义 char,short,int,unsigned,long,float,double,struct,union,void,enum,const,typedef,auto,static,break,case,continue,default,do,else,for,if,return,switch,while,sizeof,printf,FILE,fopen,NULL,fclose,exit,read,closef,printf为关键字。
在设计中预分析文件保存在test.txt中,输出结果保存在result.txt中。
本程序实现了
将词法分析器作为独立的一遍,词法分析结果存入文件。
用直接转向法实现状态转换图。
☻使用缓冲技术。
本程序能够识别简单的运算符,界符,常数,标示符和关键字。其中关键字由程序所给的关键字表kt(key table)内容指定。如有未涉及的关键字还可以通过修改程序中表内容扩展。对未定义的字符(不属于界符,运算符和常数)输出 并显示为“其他字符”。文中特别定义了注释符号,换行符号和空格。在程序设计工程中一开始未注意将当前指针后退一位的情况,在输出程序结果时发现一些字符缺漏。通过查资料【1】发现了将指针后移的用法并解决了这个问题。设计过程中牵涉到对文件的使用如c_str(),ios:binary的用法,get()函数的用法,fstream的两个类ifstream和ofstream的用法【2】实现文件的读写操作。
2011—2012学年第一学期
感谢孔繁茹老师在课程设计中的大力支持及给予的无私帮助
1.
理解词法分析器的基本功能。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号(token),把作为字符串的源程序改造成单词符号串的中间程序。因此,词法分析是编译的基础。
理解词法规则的描述方法。程序设计语言一般可以用标识符、关键字、运算符、分隔符、常量、字符串和注释符来描述
//自定义变量,数组//
ifstream infile; //以输入(从硬盘到内存)方式打开文件
画出识别单词的状态转换图。
(若状态转换图过于复杂,可以只画出主要部分;若依旧复杂,可只识别标识符和整数)
根据状态转换图手工构造词法分析程序。从以下方法中选一:
词法分析器作为独立的一遍。
词法分析结果输出到屏幕上或存入文件。
词法分析器作为一个子程序被语法分析器调用。
每次调用返回一个单词
同时将单词及属性存入符号表
#include <fstream>
#include <string>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(2)标识符
用来表示各种名字,如变量名、数组名、过程名等等。
(3)常数
常数的类型一般有整型、实型、布尔型、文字型等等。例如,100,3.14159。
(4)运算符
如+、-、*、/、>=、<=、==等等
(5)界符
如[、]、{、}、(、)、;、,、.等等。
具体实现过程:
用c++编写词法分析程序,从文件中读入预分析的源程序经词法分析将结果写入指定文件中。
string kt[36] ={"char","short","int","unsigned","long","float","double","struct","union","void",
"enum","const","typedef","auto","static","break","case","continue","default","do","else","for","if",
实验代码
///////////////////////////////////////////词法分析程序@zhangjinrong//////////////////////////////////////////////////
/////////头文件////////////
#include <iostream>
"return","switch","while","sizeof","printf","FILE","fopen","NULL",
"fclose","exit","read","close","fprintf"};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
为了分析大于4kb的程序本程序使用了著名的双缓冲技术。设计思想如下
4.状态转换图如下
5.实验工具
Vc++6.0,win7画图工具,
6.实现函数
void get_char (); //用于从buffer读取一个字符到C
int letter (int C); //判断是否是字母
int digit (int C); //判断时候是数字或者小数点
理解状态转换图及其实现。一个状态转换图可用于识别(或接受)一定的字符。大多数程序语言的单词符号都可以用转换图予以识别。转换图非常易于用程序实现,最简单的办法是让每个状态结对应一小段程序。
能够编写简单的词法分析器。
2.课程设计的要求
手工构造一个简单的词法分析程序,能够识别标识符、整数、关键字、算符、界符。
int underline (int C); //判断时候是下划线
int reserve (string token); //判断时候是关键字
void retract (); //向前指针向后退一个
void returnout (string str1,string str2); //文件打印
7.结果及测试分析
实现状态转换图。从以下方法中选一:
直接Hale Waihona Puke Baidu向法
表驱动法
四、选做实验
☻使用缓冲技术
3.课程设计内容
程序语言的单词符号一般可分为下列五种。
(1)关键字
是由程序语言定义的具有固定意义的标志符。本程序定义 char,short,int,unsigned,long,float,double,struct,union,void,enum,const,typedef,auto,static,break,case,continue,default,do,else,for,if,return,switch,while,sizeof,printf,FILE,fopen,NULL,fclose,exit,read,closef,printf为关键字。
在设计中预分析文件保存在test.txt中,输出结果保存在result.txt中。
本程序实现了
将词法分析器作为独立的一遍,词法分析结果存入文件。
用直接转向法实现状态转换图。
☻使用缓冲技术。
本程序能够识别简单的运算符,界符,常数,标示符和关键字。其中关键字由程序所给的关键字表kt(key table)内容指定。如有未涉及的关键字还可以通过修改程序中表内容扩展。对未定义的字符(不属于界符,运算符和常数)输出 并显示为“其他字符”。文中特别定义了注释符号,换行符号和空格。在程序设计工程中一开始未注意将当前指针后退一位的情况,在输出程序结果时发现一些字符缺漏。通过查资料【1】发现了将指针后移的用法并解决了这个问题。设计过程中牵涉到对文件的使用如c_str(),ios:binary的用法,get()函数的用法,fstream的两个类ifstream和ofstream的用法【2】实现文件的读写操作。
2011—2012学年第一学期
感谢孔繁茹老师在课程设计中的大力支持及给予的无私帮助
1.
理解词法分析器的基本功能。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号(token),把作为字符串的源程序改造成单词符号串的中间程序。因此,词法分析是编译的基础。
理解词法规则的描述方法。程序设计语言一般可以用标识符、关键字、运算符、分隔符、常量、字符串和注释符来描述
//自定义变量,数组//
ifstream infile; //以输入(从硬盘到内存)方式打开文件
画出识别单词的状态转换图。
(若状态转换图过于复杂,可以只画出主要部分;若依旧复杂,可只识别标识符和整数)
根据状态转换图手工构造词法分析程序。从以下方法中选一:
词法分析器作为独立的一遍。
词法分析结果输出到屏幕上或存入文件。
词法分析器作为一个子程序被语法分析器调用。
每次调用返回一个单词
同时将单词及属性存入符号表
#include <fstream>
#include <string>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(2)标识符
用来表示各种名字,如变量名、数组名、过程名等等。
(3)常数
常数的类型一般有整型、实型、布尔型、文字型等等。例如,100,3.14159。
(4)运算符
如+、-、*、/、>=、<=、==等等
(5)界符
如[、]、{、}、(、)、;、,、.等等。
具体实现过程:
用c++编写词法分析程序,从文件中读入预分析的源程序经词法分析将结果写入指定文件中。