赞
踩
课程设计C语言子集的词法分析程序
**大学
计算机科学与技术学院
实 验 报 告
( 2007 ~2008 学年度 第 1学期 )
课程名称
实验名称
C语言子集的词法分析程序
姓名学号
专业班级
地点教师一.实验目的及要求
1、目的:通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法.
2、软、硬件环境:windows xp , Microsoft visual C++ .
二.实验步骤
1、原理分析,单词符号一般分为关键字、标识符、常数、运算符、界符号五种。对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是以上五种中之一,那么就以单词的二元式形式输出。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串。
各类单词的二元式表述均具有相同的结构与长度,形式如下:
(单词种别t,单词自身的值i)
t是单词种别,而单词种别共分为五类且每类对应一张表格.
所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入五张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便.
为了方便期间本程序中引用了Const.txt 常量表 Sign.txt 标识符(32个)表。在这里将主要的保留字及标识符作一个列举(放在一个表中)。
Key form
2、编写源程序代码。
本程序用c语言实现。此程序采用一缓冲方式读入程序源码,首先进行预处理去掉注释和无效空格。然后再进行详细的词法分析,为了便于后续处理,程序设置了几个表:符号表和常数表。
3、调试程序。
三. 实验内容
1、流程图
2、程序
#include
#include
#include
#include
#include
#define KEYWORD_LEN 32 //保留字个数
#define STR_MAX_LEN 300 //标识符最大长度
#define PRO_MAX_LEN 20480 //源程序最大长度
#define STB_MAX_LEN 1000 //符号表最大容量
#define CTB_MAX_LEN 1000 //常数表最大容量
#define ERROR 0 //错误
#define ID (KEYWORD_LEN+1) //标识符
#define CONST (KEYWORD_LEN+2) //常量
#define OPERAT (KEYWORD_LEN+3) //运算符
#define DIVIDE (KEYWORD_LEN+4) //界符
int errorLine=0;
char proBuffer[PRO_MAX_LEN] = ""; //存储程序代码的全局缓冲区
char ch; //读出来的当前字符
char wordget[STR_MAX_LEN]; //标识符 或 常量
int point = 0; //源程序当前位置指针
char signTab[STB_MAX_LEN][STR_MAX_LEN]; //符号表
int pointSTB = 0; //符号表指针
char constTab[CTB_MAX_LEN][STR_MAX_LEN]; //常量表
int pointCTB = 0; //常数表指针
char kwTab[KEYWORD_LEN][10]={ //保留字表 C语言一共有32个保留字[关键字]
"auto", "break", "case", "char", "const",
"continue", "default", "do", "double", "else",
"enum", "extern", "float", "for",
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。