1 / 8
文档名称:

语法分析器-实验报告.doc

格式:doc   大小:38KB   页数:8页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

语法分析器-实验报告.doc

上传人:精品小课件 2020/8/8 文件大小:38 KB

下载得到文件列表

语法分析器-实验报告.doc

文档介绍

文档介绍::..大学学院实验报告学号:姓名:专业:班级:第周课程名称 。-的语法结构。实验环境 ParserGeneratorVC++(算法、程序、步骤和方法)文件格式Lex文件分成三个部分,分别为definitions、rules以及auxiliaryroutines,中间用%%分割开。Definitions包括要加入到生成的C程序的头部的代码,包括#include语句、#define语句及一些全局变量的定义。token也在Definitions部分定义,规定,必须自己定义token,他将token定义为一系列从258开始的正整数,如在Definition部分加入了如下定义:%tokenNUMBER,则在生成的C代码中:#defineNUMBER258。当然这个值也可以由用户定义。中的返回值类型,由于rules部分是由固定符号来代替一个Symbol的返回值,其默认类型为int,如果用户希望返回其他类型的值(如ParseTree树结点),则可以在Definition中定义Symbol的返回值。首先使用一个%union{…}包含所有需要的返回值类型,定义%type<t>{…}其中包含所有返回值为t的Symbol。Definitions中可以定义语法的结合性来消除二义性,包括两个符号%left表示左结合和%right表示右结合。rules部分定义所有语法,以及语法识别出后执行的操作。例如:declaration : var_declaration {$$=$1;} | fun_declaration {$$=$1;} ;%%表示产生式左边,$n表示产生式右边第n个字符的返回值,这条规则表示var_declaration或fun_declaration识别出后,将其赋值给declaration。Auxiliary部分包括rules部分使用的一些辅助函数,同时,main函数也在其中定义。中会自动调用yylex()获取token,默认yylex()返回int,代表识别出的token,如果文件结束返回0。因此一般会进行如下定义:staticTypeyylex(void){returngetToken();}Type就是int,专门代表token值。的出错处理函数,yyerror(char*s),在遇到错误时产生的错误信息。的入口函数为:yyparse(),调用这个函数即开始语法分析过程。中构造ParseTree,必须定义树结点,观察C-的语法,我们可以将语法分为三类:Declaration:包括函数与变量的声明。Statement:包括各种语句,如循环语句,选择语句等。Expression:包括各种表达式及各种变量、常量。我们也将节点类型分为Dec、Stmt、Exp。节点类型定义如下:typedefstructtreeNode{ //儿子 structtreeNode*child[MAXCHILDREN]; //兄弟 structtreeNode*sibling; //结点在source中的行数 intlineno; //如果结点是函数或变量的话,记录其类型 Typetype; //结点的大类型 Nod