欢迎来到天天文库
浏览记录
ID:43013137
大小:291.51 KB
页数:12页
时间:2019-09-24
《C_minus语言词法分析器实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、装订线编译原理实验报告题目:C_minus语言词法分析器学院计算机科学与技术专业xxxxxxxxxxxxxxxx学号xxxxxxxxxxxx姓名xxxx指导教师xxxx20xx年xx月xx日C_minus语言词法分析器一、实验目的 1.理解词法分析器的设计方法:利用DFA编写相应的程序。 2.掌握手工编写词法分析程序的方法。 3.复习熟悉以前学过的编程语言 4.通过实验了解编译器词法分析的工作原理 二、实验原理 1.文法的概念,DFA的表示方法。 2.词法分析程序的输出和输入:词法分析程序
2、的功能是读入源程序,输出单词符号。单词符号是程序设计语言的比本语法符号,程序设计语言的单词符号一般分为如下几种:关键字,标示符,常数,运算符,界符,单词的输出是二元式的形式,需要知道二元式的表示方法,把得到的二元式写入输出文件。 转化图如下: 源程序 词法分析程序 记号文件 3.熟悉单词的描述工具,如正规文法,正规式,以及知道正规文法和正规式的等价性以及他们之间的互相转化。熟悉把正规文法转化为正规式,把正规式转化为NFA以及把NFA转为相应的DFA,最后再把DFA简化,DFA的状态转化为相应的子程序,最后得到词法分析器
3、 4.C语言的基本语法。 三、实验要求 1、该个词法分析器要求至少能够识别以下几类单词: 关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写; 标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter
4、 digit)*; 常数:NUM = digit digit*(.digit digit*
5、ε)(e(+
6、 -
7、ε) digit digit*
8、ε),letter = a
9、..
10、z
11、A
12、..
13、Z
14、,digit = 0
15、.
16、.
17、9,包括整数,如123等;小数,如123.45等;科学计数法表示的常数,如1.23e3,2.3e-9等; 专用符号:+ - * / < <= > >= == != = , ( ) [ ] { } /* */; 2、分析器的输入为由上述几类单词构成的程序,输出为该段程序的机内表示形式,即关键字、运算符、界限符变为其对应的机内符,常数使用二进制形式,标识符使用相应的标识符表指针表示。 3、词法分析器应当能够指出源程序中的词法错误,如不可识别的符号、错误的词法等。四、实验结果(程序)及分析 #include #include18、ib.h>#include #define N 100 typedef struct { char name[30]; int code; int addr; }token;//存储刚从文件中读取的字符typedef struct { char name[30]; int code; }Keyword; typedef struct { char name[30]; int code; int addr;}symbol; Keyword key[6]={{"else",1},{"if",2},{"int",3},{"19、return",4},{"void",5},{"where",6}}; char ch;//接受字符 FILE *source;//源文件 FILE *keytxt;//关键字输出文件 FILE *badgetxt;//标识符输出文件 FILE *othertxt;//其他单词输出文件 FILE *number; int error_count;//错误的个数 int addr_count;//标识符表的指针 int lineof;//行号 token current;// 暂时存放读入的字符 token zancun; symbol current20、symbol; symbol symboltable[N];//标识符表void error(int i); void main() { void scan(); error_count=0; addr_count=0; error_count=0; lineof=0; scan();} void scan() { int i=0; void iskeyword();//判断关键字void isOthers() //判断其他单词 void output_1();//关键字输出文件 void output_2();//标识符输出21、文件 void output_others();//其他单词输出文件void I
18、ib.h>#include #define N 100 typedef struct { char name[30]; int code; int addr; }token;//存储刚从文件中读取的字符typedef struct { char name[30]; int code; }Keyword; typedef struct { char name[30]; int code; int addr;}symbol; Keyword key[6]={{"else",1},{"if",2},{"int",3},{"
19、return",4},{"void",5},{"where",6}}; char ch;//接受字符 FILE *source;//源文件 FILE *keytxt;//关键字输出文件 FILE *badgetxt;//标识符输出文件 FILE *othertxt;//其他单词输出文件 FILE *number; int error_count;//错误的个数 int addr_count;//标识符表的指针 int lineof;//行号 token current;// 暂时存放读入的字符 token zancun; symbol current
20、symbol; symbol symboltable[N];//标识符表void error(int i); void main() { void scan(); error_count=0; addr_count=0; error_count=0; lineof=0; scan();} void scan() { int i=0; void iskeyword();//判断关键字void isOthers() //判断其他单词 void output_1();//关键字输出文件 void output_2();//标识符输出
21、文件 void output_others();//其他单词输出文件void I
此文档下载收益归作者所有