📄 sentence.h
字号:
#ifndef SENTENCE_H
#define SENTENCE_H
#include "fstream.h"
#include "iostream.h"
typedef struct var
{
char name[10];//变量的标识符
}varnode;//变量
typedef struct Const
{
char name[10];//常量的标识符
char value[10];//常量的数值
}constnode;//常量
typedef struct
{
int address;//相对层次
int level;//标识符所在深度
}adinfo;//变量的层次位置信息
typedef struct Display
{
int depth; //过程的深度值
int varstart; //变量的开始索引
int varend; //变量的结尾索引
int conststart; //常量的开始索引
int constend; //常量的结尾索引
}display;//display表
typedef struct
{
int number;//需要回填的代码的编号
int endnum;//要跳转到的代码的编号
char data[41];//回填后的代码
}back_info;//回填信息
typedef struct
{
int sum;//回填信息的数量
int length;//可容纳的回填信息的条数
back_info * head;//回填信息表的头指针
}update;//回填信息表
class sentence
{
private:
char name[10];//标识符
int number;//标号
int line;//标识符所在的行数
int errornum;//错误的数量
fstream ErrorFile;//错误存储文件
fstream ResultFile;//语法分析输入文件
fstream CodeFile;//代码结果文件
long int codenum;//代码的数量
varnode *varptr;//变量链表的头指针
int varnum;//变量的总数量
int varlength;//变量的存储空间长度
constnode *constptr;//常量链表的头指针
int constnum;//常量的总数量
int constlength;//常量的存储空间长度
display dpstack[100];//display表存储栈
int dspnum;//display表存储的总数量
int depth;//当前的深度值
adinfo var_con_info;//单词的地址信息
update update_data;//回填信息表格
public:
sentence();//初始化变量
~sentence();//释放存储空间
void UpdateFile();//更新codefile文件,回填跳转语句,将middlefile中信息加入codefile中
int Insert(int index,int number,int endnum,char * data);//插入一个回填信息
int GetWord();//在文件中读取一个标识符,name保存标识符,number保存编号
void BackWord();//使文件的读指针回退一个单位
void Error();//基础错误处理
int Insert(char *name);//插入一个变量结点
int IsVar(char *name);//返回一个标识符是否为变量
int IsConst(char *name);//返回标识符是否为常量
int Insert(char *name,char *value);//插入一个常量结点
int Proganalyse();//程序主体分析
void ProgError(int tag);//程序主体分析错误处理
int Blockanalyse();//程序主干分析
void BlockError(int tag);//block部分出错处理
int constanalyse();//常量分析
void ConstError(int tag);//常量分析出错处理
int varanalyse();//变量分析
void VarError(int tag);//变量分析出错处理
int procanalyse();//新过程分析
void ProcError(int tag);//新过程分析错误处理
int bodyanalyse();//过程主体分析
void BodyError(int tag);//过程主体分析错误处理
int stateanalyse();//语句分析
void StateError(int tag);//语句分析错误处理
int idanalyse();//赋值语句分析
void IdError(int tag);//赋值语句分析错误处理
int itlanalyse();//if_then_else语句分析
void Itlanalyse(int tag);//if_then_else语句分析错误处理
int whileanalyse();//while_do语句分析
void WhileError(int tag);//while_do语句分析错误处理
int callanalyse();//call语句分析
void CallError(int tag);//call语句分析错误处理
int readanalyse();//输入函数处理
void ReadError(int tag);//输入函数处理错误分析
int writeanalyse();//输出函数分析
void WriteError(int tag);//输入函数分析错误处理
int factoranalyse();//factor分析
void FactorError(int tag);//factor分析错误处理
int termanalyse();//term分析
void TermError(int tag);//term分析错误处理
int expanalyse();//exp分析
void ExpError(int tag);//exp分析错误处理
int lexpanalyse();//lexp分析
void LexpError(int tag);//lexp分析错误处理
void Print()
{
cout<<name<<" "<<number<<endl;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -