1.实验题目:词法分析
用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号.当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串.
2.实验目的
1)熟悉词法分析的基本原理,词法分析的过程,以及词法分析中要注意的一些问题。
2)复习高级语言,进一步加强用高级语言来解决实际问题的能力。
3.实验内容
1)程序总控图如下
......
2)实验步骤
1、基于实验的内容,构造程序所需的模块.
2、根据已建构的模块,写出各个模块的相应程序代码.
3、在主函数中调用模块来完成所要得到的效果.
/*! @ compiler_CFFX.c
************************************
模块名 : 编译器---词法分析
文件名 : compiler_CFFX.c
文件实现功能 : 词法分析
作者 : onlinewan
版本 : 1.0
** ******************************** */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <alloc.h>
#include <conio.h>
int IsLetter(char ch)
{/*判断是否是字母,是则返回 1,否则返回 0 */
if(isalpha(ch)) return 1;
return 0;
}
int IsDigit(char ch)
{/*判断是否为数字,是则返回 1,否则返回 0 */
if(isalnum(ch)) return 1;
return 0;
}
int IsSpace(char ch)
{/*判断是否为空白符(空格、换行、制表符等),是则返回 1,否则返回 0*/
if(isspace(ch)) return 1;
return 0;
}
void GetChar(FILE *fp,char *ch)
{/*读取字符送ch*/
*ch = fgetc(fp);
}
void GetBC(FILE *fp,char *ch)
{/*如果是空白则继续读下一个,直到不是空白*/
do {
GetChar(fp,ch);
}while(IsSpace(*ch)&&(*ch != EOF));
}
void Retract(FILE *fp,char *ch)
{/*光标回退一位,并使 ch 为空*/
fseek(fp,-1,1);
*ch = '';
}
char Reserve(char *strToken)
{/*返回关键字的编码*/
if(strcmp(strToken,"BEGIN") == 0) return '1';
&n