词法分析

词法分析的输入

由用户指定输入文件名inName,默认为PascalProgram.pas,里面保存了PASCAL-S源程序。

词法分析的输出

记号序列,以及词法错误信息(如果有词法错误的话)。词法错误信息保存在vector lexicalErrorInformation中。

词法分析与语法分析的互联接口

记号序列,以yylex的返回值表示记号编号,属性保存在YYSTYPE类型的结构体指针yylval指向的结构中。

接口 描述
int yylex(); 语法分析程序每调用一次该程序,可以获得一个记号编号
YYSTYPE yylval; 语法分析程序每调用一次yylex,获得的记号属性保存在yylval指向的结构体中

语法分析

语法分析的输入

由词法分析提供的记号序列。

语法分析的输出

抽象语法树,语法错误信息。语法错误信息保存在vector syntaxErrorInformation中。

语法分析和语义分析的互联接口

接口 描述
_Program *ASTRoot 抽象语法树的根节点指针

语义分析

语义分析的输入

语法分析提供的抽象语法树。

语义分析的输出

经过注释的抽象语法树和保存了完整信息的符号表,语义错误信息,语义警告信息。语义错误信息保存在vector semanticErrorInformation中,语义警告信息保存在vector semanticWarningInformation中。

语义分析和代码生成之间的接口

接口 描述
_Program *ASTRoot 经过注释的抽象语法树的根节点指针
_SymbolTable *mainSymbolTable 主符号表指针
_SymbolRecord findSymbolRecord(_SymbolTable currentSymbolTable, string id, int mode=0); 从指定符号表找到指定标识符的记录,mode=0表示内层符号表未找到时,需要到外层符号表查找,mode!=0表示不需要

代码生成

代码生成的输入

经过语义分析注释的抽象语法树,符号表入口。

代码生成的输出

C程序。