- 1.1函数接口设计
- 1.1.1 辅助函数
- 1.1.2 转化为AST的函数
- 1.1.2.1 获取标识符列表
- 1.1.2.2 获取数组上下界列表
- 1.1.2.3 获取类型
- 1.1.2.4 获取变量定义
- 1.1.2.5 获取变量定义列表
- 1.1.2.6 获取常量定义节点具体信息
- 1.1.2.7 获取常量定义节点
- 1.1.2.8 获取常量定义节点列表
- 1.1.2.9 获取形式参数的具体信息
- 1.1.2.10 区别形式参数
- 1.1.2.11 获取形式参数
- 1.1.2.12 获取形式参数节点列表
- 1.1.2.13 获取子程序头
- 1.1.2.14 获取factor
- 1.1.2.15 获取term
- 1.1.2.16 获取simple expression
- 1.1.2.17 获取expression
- 1.1.2.18 获取表达式列表
- 1.1.2.19 获取变量引用节点
- 1.1.2.20 获取变量引用节点列表
- 1.1.2.21 获取else部分语句
- 1.1.2.22 获取过程调用
- 1.1.2.23 获取各种类型的语句
- 1.1.2.24 获取语句列表
- 1.1.2.25 获取复合语句块
- 1.1.2.26 获取子程序体
- 1.1.2.27 获取函数定义
- 1.1.2.28 获取子程序定义列表
- 1.1.2.29 获取主程序体
- 1.1.2.30 获取主程序头
- 1.1.2.31 获取整个程序
1.1函数接口设计
1.1.1 辅助函数
1.1.1.1 字符串转整型
函数接口
int str2int(string str);
``
参数列表 | 参数 | 描述 | | —- | —- | | string str | 需要转化的字符串 |
返回值
int,表示转化后的整型数字<br />
1.1.1.2 字符串转浮点型
函数接口
float str2float(string str);
参数列表 | 参数 | 描述 | | —- | —- | | string str | 需要转化的字符串 |
返回值
float,表示转化后的浮点型数字
1.1.2 转化为AST的函数
这一部分的函数基本上与PASCAL-S的文法中的文法符号一一对应,通过相互之间的(递归)调用,最终将普通的语法分析树转化为抽象语法树。
1.1.2.1 获取标识符列表
函数接口
void getIdList(Type *now, vector< pair<string, int> >& res,bool reverseFlag);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 | | vector< pair
>& res | 存放标识符及其所在行号的列表 | | bool reverseFlag | 是否需要翻转标识符列表 |
返回值
无<br />
1.1.2.2 获取数组上下界列表
函数接口
void getArrayRangeList(Type *now, vector< pair<int, int> >& _arrayRangeList);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 | | vector< pair
>& _arrayRangeList | 数组上下界列表 |
返回值
无<br />
1.1.2.3 获取类型
函数接口
_Type* getType(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
- 返回值
1.1.2.4 获取变量定义
函数接口
void getVariant(Type *now, vector<_Variant*>& _variantList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Variant>& _variantList | 变量节点列表,新获取的变量节点需添加到该变量节点列表中 |
返回值
无<br />
1.1.2.5 获取变量定义列表
函数接口
void getVariantList(Type *now, vector<_Variant*>& _variantList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Variant>& _variantList | 变量节点列表 |
- 参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | _Constant &_constant | 将获取的常量信息保存到该常量节点类中 |
返回值
无<br />
1.1.2.7 获取常量定义节点
函数接口
void getConst(Type *now, vector<_Constant*>& _constantList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Constant>& _constantList | 常量定义节点列表,新获取的常量定义节点需要添加到该列表中 |
返回值
无
1.1.2.8 获取常量定义节点列表
函数接口
void getConstList(Type *now, vector<_Constant*>& _constantList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Constant>& _constantList | 常量定义节点列表 |
返回值
无<br />
1.1.2.9 获取形式参数的具体信息
函数接口
void getValueParameter(Type *now, vector<_FormalParameter*>& _formalParaList, int flag = 0);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_FormalParameter>& _formalParaList | 形式参数节点列表,新获取的形式参数节点需添加到该列表中 | | int flag | flag=0表示传值参数,flag!=0表示传引用参数 |
返回值
无
备注
该函数获取的不一定是单纯的传值参数,该函数的参数flag就是为了表示当前语法分析树节点表示的是单纯的传值参数,还是去除了VAR关键字的传引用参数。<br />
1.1.2.10 区别形式参数
函数接口
void getParameter(Type *now, vector<_FormalParameter*>& _formalParaList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_FormalParameter>& _formalParaList | 形式参数节点列表 |
返回值
无
备注
该函数用于区别所识别的是传值参数还是传引用参数,并以此来决定调用getValueParameter时flag的取值<br />
1.1.2.11 获取形式参数
函数接口
void getFormalParameter(Type *now, vector<_FormalParameter*>& _formalParaList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_FormalParameter>& _formalParaList | 形式参数节点列表 |
返回值
无<br />
1.1.2.12 获取形式参数节点列表
函数接口
void getFormalParaList(Type *now, vector<_FormalParameter*>& _formalParaList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_FormalParameter>& _formalParaList | 形式参数节点列表 |
返回值
无<br />
1.1.2.13 获取子程序头
函数接口
void getSubprogramHead(Type *now, pair<string, int>& functionID, vector<_FormalParameter*>& _formalParaList, pair<string,int> &_type);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | pair
& functionID | 子程序名及行号 | | vector<_FormalParameter >& _formalParaList | 形式参数节点列表 | | pair&_type | 返回值类型及行号,可能为空串,表示无返回值,即当前子程序是过程 |
返回值
无<br />
1.1.2.14 获取factor
函数接口
_Expression* getFactor(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Expression*,指向表达式节点类
1.1.2.15 获取term
函数接口
_Expression* getTerm(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
- 返回值
1.1.2.16 获取simple expression
函数接口
_Expression* getSimpleExpression(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
- 返回值
1.1.2.17 获取expression
函数接口
_Expression* getExpression(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
- 返回值
1.1.2.18 获取表达式列表
函数接口
void getExpressionList(Type *now, vector<_Expression*>& _expressionList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Expression>& _expressionList | 表达式节点列表 |
返回值
无<br />
1.1.2.19 获取变量引用节点
函数接口
_VariantReference* getVariantReference(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_VariantReference*,指向变量引用节点<br />
1.1.2.20 获取变量引用节点列表
函数接口
void getVariantReferenceList(Type *now, vector<_Expression*>& _expressionList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Expression>& _expressionList | 表达式节点类列表 |
- 返回值
1.1.2.21 获取else部分语句
函数接口
_Statement* getElseStatement(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Statement*,指向语句节点类<br />
1.1.2.22 获取过程调用
函数接口
_Statement* getProcedureCall(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Statement*,指向语句节点类<br />
1.1.2.23 获取各种类型的语句
函数接口
_Statement* getStatement(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Statement*,指向语句节点类<br />
1.1.2.24 获取语句列表
函数接口
void getStatementList(Type *now, vector<_Statement*>& _statementList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Statement>& _statementList | 语句节点类列表 |
返回值
无<br />
1.1.2.25 获取复合语句块
函数接口
_Compound* getCompoundStatement(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Compound*,指向复合语句块节点类<br />
1.1.2.26 获取子程序体
函数接口
void getSubprogramBody(Type *now, vector<_Constant*>& _constList, vector<_Variant*>& _variantList, _Compound* &_compound);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_Constant>& _constList | 常量定义节点类列表 | | vector<_Variant*>& _variantList | 变量定义节点类列表 | | _Compound* &_compound | 复合语句块 |
返回值
无<br />
1.1.2.27 获取函数定义
函数接口
_FunctionDefinition* getSubprogramDefinition(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_FunctionDefinition*,指向函数定义节点类<br />
1.1.2.28 获取子程序定义列表
函数接口
void getSubprogramDefinitionList(Type *now, vector<_FunctionDefinition*>& _subprogramDefinitionList);
参数列表 | 参数 | 描述 | | —- | —- | | Type now | 当前语法分析树节点 | | vector<_FunctionDefinition>& _subprogramDefinitionList | 子程序定义节点类列表 |
返回值
无<br />
1.1.2.29 获取主程序体
函数接口
_SubProgram* getProgramBody(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_SubProgram*,指向分程序节点类<br />
1.1.2.30 获取主程序头
函数接口
void getProgramHead(Type *now, pair<string, int>& _programId, vector< pair<string, int> >& _paraList);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 | | pair
& _programId | 主程序名及其行号 | | vector< pair >& _paraList | 主程序参数名及其行号列表 |
返回值
无<br />
1.1.2.31 获取整个程序
函数接口
_Program* getProgram(Type *now);
参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |
返回值
_Program*,抽象语法树的根节点指针