1.1函数接口设计

1.1.1 辅助函数

这一部分的函数为转化为AST的过程提供辅助。

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 | 当前语法分析树节点 |

  • 返回值

_Type*,表示类型

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 | 变量节点列表 |

  • 返回值

     无<br /> 
    

    1.1.2.6 获取常量定义节点具体信息

  • 函数接口

    void setConst(Type *now, _Constant* &_constant);
    
  • 参数列表 | 参数 | 描述 | | —- | —- | | 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 | 当前语法分析树节点 |

  • 返回值

_Expression*,指向表达式节点类

1.1.2.16 获取simple expression

  • 函数接口

    _Expression* getSimpleExpression(Type *now);
    
  • 参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |

  • 返回值

_Expression*,指向表达式节点类

1.1.2.17 获取expression

  • 函数接口

    _Expression* getExpression(Type *now);
    
  • 参数列表 | 参数 | 描述 | | —- | —- | | Type *now | 当前语法分析树节点 |

  • 返回值

_Expression*,指向表达式节点类

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*,抽象语法树的根节点指针