词法分析程序的设计与实现
实验内容:
设计并实现 C 语言的词法分析程序,要求如下。
1. 可以识别出用 C 语言编写的源程序中的每个单词符号,并以记号的形式输出
每个单词符号。
2. 可以识别并读取源程序中的注释。
3. 可以统计源程序中的语句行数,单词个数和字符个数,其中标点和空格不计
算为单词,并输出统计结果。
4. 检查源程序中存在的错误,并可以报告错误所在的行列位置。
5. 发现源程序中存在错误后,进行适当的恢复,使词法分析可以继续进行,通
过一次词法分析处理,可以检查并报告源程序中存在的所有错误。
实验要求:
方法 1:采用 C/C++作为实现语音,手工编写词法分析程序。
方法 2:通过编写 LEX 源程序,利用 LEX 软件工具自动生成词法分析程序。
实验环境:
该实验在 VS2010 环境下进行。
源代码(含注释):
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
/*关键字表*/
Char kb[44]
[10]={"char","short","int","unsigned","long","float","double","struct","union","void",
"enum","signed","const","volatile","typedef","auto","register","static","extem",
"break","case","continue","default","do","else","for","goto",
"if","return","switch","while","sizeof","txt","printf","FILE","fopen","NULL",
"fclose","exit","r","read","close","w","fprintf"};
/*分别存行数,单词数,字符数*/
int totallines=1;
int totalwords=0;
int totalletters=0;
char wordlist [200][20]={""}; //单词表
int pointoftable=0; //单词表的入口值
ifstream infile;
ofstream outfile;
char buffer1 [64]; //两个缓冲 buffer
char buffer2 [64];