编译程序实验指导书讲解(共26页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《编译程序实验指导书讲解(共26页).doc》由会员分享,可在线阅读,更多相关《编译程序实验指导书讲解(共26页).doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上编译程序实验指导书实验目的:用C语言对一个C语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。1词法分析1.1 实验目的设计、编制并测试一个词法分析程序,加深对词法分析原理的理解。1.2 实验要求1.2.1 待分析的C语言子集的词法1. 关键字main if else int char for while 所有的关键字都是小写。2专用符号= + - * / = = != ; : , ( )3其他标记ID和NUM通过以下正规式定义其他标记:IDletter(letter|digit)*NUMdigit digit*lettera
2、|z|A|Zdigit0|94空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。1.2.2 各种单词符号对应的种别码表1 各种单词符号的种别码单词符号 种别码 单词符号 种别码 单词符号 种别码main 1 = 21 , 32int 2 + 22 : 33char 3 - 23 ; 34if 4 * 24 35else 5 / 25 = 37while 7 ) 27 = 38ID 10 28 = 39MUN 20 29 != 40 30 0 1000 31 ERROR -11.2.3 词法分析程序的功能输入:所给文法的源程序字符串。输出:二元
3、组(syn,token或sum)构成的序列。其中,. syn为单词种别码。. Token为存放的单词自身字符串。. Sum为整型常量。具体实现时,可以将单词的二元组用结构进行处理。例如,对源程序main()int i=10;while(i) i=i-1;的源文件,经词法分析后输出如下序列:(1,main) (26,() (27,) (30, (2,int) (10,i) (21,=) (20,10) (34,;) (7,while)(26,() (10,i) (27,) (10,i) (21,=) (10,i) (23,-) (20,1) (34,;) (31,)1.3 词法分析程序的主要算法
4、思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。1. 主程序示意图 主程序示意图如图1所示。 置初值调用扫描子程序输出单词二元组输入串结束结束否是图1 词法分析主程序示意图其中初值包括如下两方面:(1) 关键字表初值关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:char *KEY_WORDS8=“main”,”int”,”char”,”if”,”
5、else”,”for”,”while”;为分析方便,这里把main作关键字处理。(2) 程序中需要用到的主要变量:syn,token和sum。2. 扫描子程序的算法思想首先设置三个变量:token用来存放构成单词符号的字符串;sum用来存放整型单词;syn用来存放单词符号的种别编码。扫描子程序主要部分流程如图2所示。变量初始化 忽略空格是是否文件结束 返回否其他符号运算符,界符等符号字母数字否对不同符号给出相应的syn值是否关键字是Syn为对应关键字的单词种别码返回报错拼数拼字符串Syn=10Syn=11图2 词法分析程序流程2语法分析2.1 实验目的编制一个递归下降分析程序, 实现对词法分析
6、程序所提供的单词序列进行语法检查和结构分析。2.2 实验要求利用C语言编制递归下降分析程序,并对C语言的简单子集进行分析。2.2.1 待分析的C语言子集的语法用扩充的BNF表示如下:(1) =main( )(2) =(3) =;(4) =|(5) =ID=(6) =if()(7) =while(8) =(9) =+|-(10)=*|/(11)=ID|NUM|()(12)=|=|=|!=2.3 语法分析程序的算法思想(1) 主程序示意图如图3所示。置初值调用scaner读下一个单词符号调用lrparser结束图3 语法分析主程序示意图(2) 递归下降分析程序示意图如图4所示。lrparser否否
7、是否单词串main()是调用scaner出错处理调用语句块分析函数否源程序是否结束是打印分析成功图4递归下降分析程序示意图(3) 语句块分析过程示意图如图5所示。否是否是调用scaner出错处理调用语句串分析过程否是否是出口图5语句块分析示意图(4) 语句串分析过程示意图如图6所示。调用statement函数 否否是否;是调用scaner调用statement函数出错处理图6语句串分析示意图(5) statement (语句) 函数流程如图7所示;(6) expression(表达式)分析过程如图8所示;(7) term(项)分析过程如图9所示;(8) condition(条件)分析过程如图1
8、0所示;(9) factor(因子)分析过程如图11所示。否是调用scaner是调用expression是否标识符否是否ifififfifififif标识符否是否while是是调用scaner调用scaner是否=否调用condition调用condition调用语句块调用语句块调用scaner出错处理图7 statement函数流程调用factor调用ffactor调用term出错处理调用factor调用scaner是否*、/是否否是否+、-是出错处理调用scaner调用term图8 expression分析过程示意图 图9 term分析过程示意图调用scaner调用expression否是
9、否逻辑运算符是出错处理调用expression图10 condition分析过程示意图是是否标识符否是是否数字否是否(否是调用expression调用scaner是否)否调用scaner是出错处理调用scaner图11 factor分析过程示意图 3语义分析产生中间代码3.1 实验目的通过上机实验,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。3.2 实验要求采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。3.2.1 实验的输入和输出输入是语法分析提供的正确的单词串,输出是四元式序列。例如,对于语句串i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译程序 实验 指导书 讲解 26
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内