资源简介
设计并实现 C 语言的词法分析程序,要求如下。
(1) 可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。
(2) 可以识别并读取源程序中的注释。
(3) 可以统计源程序中的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果。
(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。
(5) 发现源程序中存在错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有词法拼写错误。
代码片段和文件信息
/***********************************************************/
/* 词法分析程序的设计与实现 */
/***********************************************************/
#include
#include
#include
#include
#include
using namespace std;
const int BUFF=4096; //设置缓冲组大小
char buffer[BUFF];
int beginforward;
int line=1character=1word=0; //用于统计
int rownum=0; //记录列数
char get_char(ifstream & insofstream & outs); //从缓冲区读入一字符
char get_nbc(ifstream & insofstream & outs); //从缓冲区读入一非空白符
void retract(); //向前扫描指针forward后退一个字符
int reserve(string test); //查保留字表
int main()
{
int i;
int iskey; //存放reserve()的返回值
char c;
string token; //存放单词的字符串
ifstream ins; //打开输入和输出文件
ins.open(“in.txt“);
ofstream outserr;
outs.open(“out.txt“);
err.open(“err.txt“); //打开错误输出文件
outs << setw(-30) << “正规表达式“ << setw(25) << “记号“ << setw(30) <<“属性\n\n“;
buffer[BUFF/2-1]=EOF; //设置两个标志位
buffer[BUFF-1]=EOF;
begin=forward=0; //初始两个指针
c=ins.get();
i=0;
while(c!=EOF&&i {
buffer[i]=c;
c=ins.get();
i++;
}
buffer[i]=EOF;
token=““; //初始化
c=get_nbc(insouts);
int flag=1;
while(c!=EOF){
switch(c)
{
case ‘a‘...‘z‘: //判断标识符是否为关键字
case ‘A‘...‘Z‘:
case ‘_‘:
flag=1 ;
while(isalpha(c)||isdigit(c)||c==‘_‘)
{
token+=c;
c=get_char(insouts);
if (c==‘@‘||c==‘‘‘||c==‘$‘||c==‘?‘)
{
err<< token << c << “ “ << “ERROR!非法标识符。位置:第“ << line << “行,第“<< rownum << “列\n“;
word--;
while(c!=‘\n‘&&c!=‘ ‘&&c!=‘\t‘) //跳过非法字段继续向下分析
c=get_char(insouts);
flag=0;
retract();
}
}
word++;
if(flag)
{retract();
iskey=reserve(token);
if(iskey==0)
{
outs << setw(5)<< token << setw(28) << “id“ << setw(40) << setw(40) << “*identifier_table_entry\n“; //标识符
token=““;
}
else
{
outs << setw(5) << token << setw(28) << token << setw(30) << “-\n“; //若是关键字,则直接输出此关键字
- 上一篇:编译原理语法分析器SLR(1)
- 下一篇:C语言 词法分析器 C#实现
相关资源
- 北邮-编译原理-词法分析
- 词法分析器有去除注释功能
- 自定义词法规则的词法分析器
- C语言词法分析程序
- 简易词法分析器——基于C语言
- 词法分析C++源码
- 词法分析代码内有报告
- 编译原理词法分析实验
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- 编译原理课程设计词法语法分析器
- LEX实现一个C语言子集的词法分析器
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 无符号数的词法分析程序 C++版
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理 词法分析器
- 简易C语言编译器的设计与实现
- 编译原理综合性实验 选择部分C语言的
- 编译器前两步
- 实验一:词法分析程序c++
- PL/0语法分析程序
- 词法分析器(c语言实现)246881
- 编译原理 词法分析 源代码
- 词法分析C++程序
- 编译原理——词法分析器设计与实现
- 编译原理 C语言实现词法分析
- 不同进制数的识别程序设计
- 编制一个读单词过程,从输入的源程
评论
共有 条评论