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

📄 sentence.h

📁 编译原理中的语法分析和语义分析
💻 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 + -