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 + -
显示快捷键?