⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accidanaly.h

📁 手工编制词法分析系统
💻 H
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define		OK				1
#define		TRUE			1
#define		FALSE			0
#define		ERROR			0
#define		FRONT			0				//扫描缓冲区的前段
#define		BACK			1				//扫描缓冲区的后段
#define		KEYWORDS		12				//关键字个数
#define		MAXKEYNUM		10				//关键子最大长度为9
#define		MAXSYMNUM		15				//符号的最大长度
#define		MAXSYMTAB		100				//符号表长度
#define		SCANBUFF		120				//扫描缓冲区的大小

//符号表中的类型
typedef enum Style
{
	constant,
	variable,
	procedur
}Style;

//符号表数据结构
typedef struct SymTab
{
	char name[MAXSYMNUM];	//名字
	Style kind;				//类型
	int value;				//数值,仅const类型
	int level;				//层次,非const类型
	int Adr;				//地址,非const类型
	int size;				//数据空间大小,仅procedure类型
}SymTab, AdrTable;

//二元式数据结构
typedef struct TElem
{
	int category;		//种别编码
	int adr;			//指向符号表的地址
}TElem, *AdrTElem;

//符号及关键字的种别编码
enum Symbol
{
	nul,    plus,   minus,     times,    slash,   number,    ident,
	comma,  eql,    lparen,    rparen,   period,  semicolon, evaluate,
	beginesym,   endsym,   ifsym,    thensym,   whilesym,  writesym,
    readsym,     dosym,    callsym,  constsym,  varsym,    procsym
};

//关键字表
char KeyWord[KEYWORDS][MAXKEYNUM] = { "begine", "call", "const", "do", "end", "if",
									  "procedure", "read", "then", "var", "while", "write" };
//关键字对应的符号
enum Symbol KwSym[KEYWORDS] = { beginesym, callsym, constsym, dosym, endsym, ifsym,
								procsym, readsym, thensym, varsym, whilesym, writesym };

enum Symbol OBSym[256];			//单字符的符号值
char ch =' ';					//存放当前读取的字符
int line = 0;					//分析时的源程序所在行数
int level = 0;					//分析时标识符所在层次
char token[MAXSYMNUM];			//存放构成单词符号的字符串
int Num=0;						//存放用户定义的数
SymTab table[MAXSYMTAB];		//符号表
int Ptable=1;					//符号表指针,0号单元不用
char scanbuffer[SCANBUFF];		//扫描缓冲区
int start = 0;					//扫描缓冲区的指针
enum Symbol BackUp=nul;			//关键字类型备份
int backp=1;					//保留在查找符号表过程中最后到达的结点

FILE *fp_data = NULL;			//指向源程序文件的指针
FILE *fp_TwoElem = NULL;		//指向二元式文件的指针
FILE *fp_SymTable = NULL;		//指向符号表文件的指针


void InitAll(void);			//初始化
int InputData(void);		//数据输入模块
int AccidAnaly(void);		//词法分析模块
int GetSym(void);			//获得一个单词符号
int Getch(void);			//获得一个字符
int LoadTable(int*);		//登录符号表
int Error(int ErrorNum);	//出错处理函数
int state_CharStr();		//基本字和标示符处理
int state_Number();			//常数处理
int state_OptBoud();		//运算符界符处理
int IntegerConversion(int begine, int end);		//整数转换
int SaveTElem(enum Symbol, int);				//将二元式存入文件TwoElem.c中
void PrintTElem(void);			//打印二元式序列
void PrintTable(void);			//打印符号表
int DealConst(int *);			//常量处理
int DealVar(int *);				//变量处理
int DealProc(int *);			//变量处理

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -