gramanalyze.h

来自「pl0文法编译器」· C头文件 代码 · 共 74 行

H
74
字号
#ifndef __GRAMANALYZE_H
#define __GRAMANALYZE_H

#include "SymSet.h"
#include "LexAnalyze.h"
#include "PL0Compiler.h"
#include "CCode.h"


	
/***************************语法分析*************************************/
/*说明:																	*/
/*作者:	马永焘																*/
/*时间:																	*/
/*版本:																	*/
/************************************************************************/

class GramAnalyze
{
public:
	GramAnalyze(PL0Compiler *p);
	string getName(){return name;}
	double getNumber(){return number;}
	int getLev(){return lev;}
	int DataAddr(){return dx[lev];}//返回符号表中变量的相对地址
	void DataAddr(int n){dx[lev]+=n;}
	token_pair getToken(){return token;}

public:
	void getSymbol(){token = pl0Compiler->lexAnalyze->getSymbol();}//从词法分析程序得到下一个单词,保存在token变量中
	bool test(SymSet s1, SymSet s2, int errorCode);
	void startCompile();
private:
	void constDeclaration();//常量声明
	void varEnter(object kind);
	void varDeclaration(object kind);//变量声明
	void block(SymSet set1);
	void formalPar(SymSet set1);//形式参数表
	void procDeclaration(SymSet set1);//过程声明部分
	void funcHead(SymSet set1);//函数首部
	void funcDeclaration(SymSet set1);//函数声明部分
	void readFunc(SymSet set1);
	void writeFunc(SymSet set1);
	Symbol expression(SymSet set1);//表达式
	void compStament(SymSet set1);//复合语句
	void stament(SymSet set1);//语句
	void forFunc(SymSet set1);
	void ifFunc(SymSet set1);
	Symbol term(SymSet set1);//项
	Symbol factor(SymSet set1);//因子
	void funcCall(SymSet set1);//函数调用
	void procCall(SymSet set1);//过程调用
	void actualPara(SymSet set1, int i, int &numOfPara);//实在参数
	void identForStatment(SymSet set1);//赋值语句
	void condition(SymSet set1);//条件
	void whileFunc(SymSet set1);//while语句

private:
	void typeFill(Symbol type);

private:
	token_pair token;
	int lev;
	int dx[MAX_LEV+1];
	string name;
	double number;
	PL0Compiler *pl0Compiler;
/****测试符号集***********/
	SymSet declBegSys;//声明开始符号集
	SymSet statBegSys;//语句开始符号集
	SymSet facBegSys;//因子开始符号集
};

#endif//GramAnalyze.h

⌨️ 快捷键说明

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