TINY部分源码分析报告

TINY部分源码分析报告

ID:37899007

大小:115.50 KB

页数:21页

时间:2019-06-02

TINY部分源码分析报告_第1页
TINY部分源码分析报告_第2页
TINY部分源码分析报告_第3页
TINY部分源码分析报告_第4页
TINY部分源码分析报告_第5页
资源描述:

《TINY部分源码分析报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、TINY源码分析一、文件概述MAIN.C:主函数GLOBALS.H:全局定义的文件SCAN.C/SCAN.H:词法分析PARSE.C/PARSE.H:语法分析UTIL.C/UTIL.H:构造树SYMTAB.C/SYMTAB.H:符号表CGEN.C/CGEN.H:生成"汇编代码"CODE.C/CODE.H:这个只是用来把分析过程输出到屏幕的.二、各个文件的分析1.MAIN.C:主要有三个FILE*句柄:source--源代码文件。listing--显示分析过程的文件,这里重定向到stdout。code--目标汇编代码文件。从该文件中可知程序运行

2、的流程:检查参数正确否(tiny.exefilename)->构造语法树(调用parse函数)->根据语法树生成代码(调用codeGen函数,该函数又调用cGen函数。2.GLOBALS.H:定义了关键字个数8个。定义了关键字,运算符等内容的枚举值。定义了语句类型的枚举值,这个决定树的结点。定义了变量类型(也就三种,void,integer,boolean)。定义了树的节点--这个最重要了!!其结构如下所示:typedefstructtreeNode{structtreeNode*child[MAXCHILDREN];structtreeNo

3、de*sibling;intlineno;NodeKindnodekind;union{StmtKindstmt;ExpKindexp;}kind;union{TokenTypeop;intval;char*name;}attr;ExpTypetype;/*fortypecheckingofexps*/}TreeNode;3.UTIL.C/UTIL.H主要函数TreeNode*newStmtNode(StmtKindkind)此函数创建一个有关语法树的声明节点TreeNode*newExpNode(ExpKindkind)此函数创建一个有关语

4、法树的表述节点char*copyString(char*s)此函数分配和创建一个新的已存在树的复制voidprintTree(TreeNode*tree)输出一个语法树这两个文件主要是关于语法树的创建和输出4.SCAN.c/SCAN.H主要有这么几个函数:staticintgetNextChar(void);staticvoidungetNextChar(void);staticTokenTypereservedLookup(char*s);TokenTypegetToken(void);reservedLookup函数是查找关键字的,在符号

5、表中找。这里还定义了一个保存关键字的结构:staticstruct{char*str;TokenTypetok;}reservedWords[MAXRESERVED]={{"if",IF},{"then",THEN},{"else",ELSE},{"end",END},{"repeat",REPEAT},{"until",UNTIL},{"read",READ},{"write",WRITE}};最重要的是getToken(void)函数。这个相当于lex的功能,进行词法分析。也就是一个DFA,switch后面跟了一堆的case。其中getN

6、extChar(void)函数的思路,以下列出:staticintgetNextChar(void){if(!(linepos

7、lineBuf[linepos++];}4.PARSE.C/PARSE.H有这么几个函数:TreeNode*parse(void)staticTreeNode*stmt_sequence(void);staticTreeNode*statement(void);staticTreeNode*if_stmt(void);staticTreeNode*repeat_stmt(void);staticTreeNode*assign_stmt(void);staticTreeNode*read_stmt(void);staticTreeNode*wr

8、ite_stmt(void);staticTreeNode*exp(void);staticTreeNode*simple_exp(void);staticTree

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。