在对c语言源程序进行词法分析的过程中,实验二 词法分析实验.doc

实验二 词法分析实验

第 PAGE \* Arabic \* MERGEFORMAT 12 页

实验二 词法分析

一、目的要求

通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

二、实验分析

本实验以用户指定的想编译的以C语言编写的文件作为词法分析程序的输入数据。

在进行词法分析中,先自文件头开始以行为单位扫描程序,将该行的字符读入预先设定的一个数组缓冲区中,然后对该数组的字符逐词分割,进行词法分析,将每个词分割成关键字、标识符、常量和运算符四种词种,最终产生四个相对应的表,即关键字表、标识符表、常量表和运算符表,它们以文件的形式进行存储。除此之外,还产生一个编译后的文件,它指定了每个词在四个表中的位置。

三、实验过程

文件:

cpile.c 主程序文件

key.txt 关键字文件

operation.txt 运算符文件

id.txt 标识符文件

const.txt 常量文件

after_com.txt 编译后产生的文件

主要变量:

FILE *sfp,*nfp,*ifp,*kfp,*cfp,*pfp;

char ib[50][20] 标识符表(动态生成)

char cb[50][10] 常量表(动态生成)

char kb[44][10] 关键字表(预先定义好的)

char pb[36][5] 运算符表(预先定义好的)

主要的子函数名:

int number(char s[],int i); 数字处理函数

int letter(char s[],int i); 字符处理函数

int operation(char s[],int i); 运算符处理函数

void seti (char s[]); 标识符建立函数

void setc (char s[]); 常量建立函数

void cfile(char s1[], char s2[],int m); 将词和词所在表中位置写入编译后文件

void error1(char s[]); 字符处理出错报告

void error2(char s[]); 标识符处理出错报告

void error3(char s[]); 运算符处理出错报告

void openall(); 打开所有文件

void writeall(); 将四个表写入文件

void closeall(); 关闭所有文件

下面简要分析一下词法分析程序的运行流程:

#include

#include

#include

#include

#define SIZE 256

#define null 0

int line=0,error=0,mark1=0,mark2=0;

char *sname;

FILE *sfp,*nfp,*ifp,*kfp,*cfp,*pfp;

/**/

char ib[50][20];

char cb[50][10];

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",

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值