学习用递归下降算法和yacc工具

学习用递归下降算法和yacc工具

ID:31385291

大小:521.50 KB

页数:9页

时间:2019-01-09

学习用递归下降算法和yacc工具_第1页
学习用递归下降算法和yacc工具_第2页
学习用递归下降算法和yacc工具_第3页
学习用递归下降算法和yacc工具_第4页
学习用递归下降算法和yacc工具_第5页
资源描述:

《学习用递归下降算法和yacc工具》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案实验三学习用递归下降算法和YACC工具实现TINY语言的语法分析器一、实验目的:通过本次实验,进一步加深对递归下降算法与抽象语法树的理解,学习程序设计语言的语法分析器的手工编程方法。二、实验任务:仔细阅读并测试TINY语言的语法分析器的相关程序,同时复习递归下降算法与抽象语法树的相关理论。三、实验内容:(1)改写文法与画语法图;(2)TINY语言的抽象语法树节点的数据类型的定义与说明;(3)TINY语言的语法分析器源程序的阅读与注释;(4)TINY语言的语法分析器的YACC输入文件阅读与注释;(5)编译并测试TINY语言的语法分析器;四、实验分析及解答:(1)改

2、写文法与画语法图:首先将TINY语言的BNF文法(参见《编译原理与实践》第3章)改写成EBNF文法,然后画出相应的语法图。精彩文档实用标准文案改写后的EBNF程序,如下:文法规则:精彩文档实用标准文案用语法图表示如下:精彩文档实用标准文案(2)TINY语言的抽象语法树节点的数据类型的定义与说明:当把语法分析器作为一遍时,抽象语法树是作为语法分析器的输出而定义的“简化版”的语法分析树。精彩文档实用标准文案精彩文档实用标准文案(3)TINY语言的语法分析器源程序的阅读与注释:阅读源程序PARSE.H、PARSE.C以及相关程序,并给出必要的中文注释。头文件PARSE.H:/*定

3、义TINY的语法分析函数头文件*/#ifndef_PARSE_H_#define_PARSE_H_TreeNode*parse(void);/*声明语法树节点类型的语法分析函数*/#endif源文件PARSE.C部分代码注释说明:/*字符匹配函数*/staticvoidmatch(TokenTypeexpected){if(token==expected)token=getToken();else{/*出错时,没有消耗掉当前记号*/syntaxError("unexpectedtoken->");printToken(token,tokenString);fprintf(l

4、isting,"");}}TreeNode*stmt_sequence(void){TreeNode*t=statement();/*指向语法树根节点*/TreeNode*p=t;/*指向第一个节点,循环需要对非follow(stmt_sequence)中的记号进行循环*/while((token!=ENDFILE)&&(token!=END)&&(token!=ELSE)&&(token!=UNTIL)){TreeNode*q;match(SEMI);精彩文档实用标准文案q=statement();if(q!=NULL){if(t==NULL)t=p=q;/*若根节点为空

5、,回到第一个节点*/else/*nowpcannotbeNULLeither*/{p->sibling=q;p=q;}}}returnt;}/*语句函数*/TreeNode*statement(void){TreeNode*t=NULL;switch(token){caseIF:t=if_stmt();break;caseREPEAT:t=repeat_stmt();break;caseID:t=assign_stmt();break;caseREAD:t=read_stmt();break;caseWRITE:t=write_stmt();break;default:sy

6、ntaxError("unexpectedtoken->");printToken(token,tokenString);token=getToken();/*消耗掉当前记号*/break;}/*endcase*/returnt;}/*if语句函数*/TreeNode*if_stmt(void){TreeNode*t=newStmtNode(IfK);match(IF);/*消耗掉if记号*/if(t!=NULL)t->child[0]=exp();match(THEN);/*检查THEN记号,没有则出错*/if(t!=NULL)t->child[1]=stmt_seque

7、nce();if(token==ELSE){match(ELSE);if(t!=NULL)t->child[2]=stmt_sequence();}match(END);returnt;/*返回if语句节点*/}(4)TINY语言的语法分析器的YACC输入文件阅读与注释:阅读源程序YACC/GLOBALS.H、YACC/TINY.Y,中文注释(部分)。精彩文档实用标准文案(5)编译并测试TINY语言的语法分析器:精彩文档实用标准文案精彩文档

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

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

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