📄 accidanaly.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 + -