编译原理 词法分析程序

上传人:xzh****18 文档编号:35528284 上传时间:2018-03-17 格式:DOC 页数:7 大小:959KB
返回 下载 相关 举报
编译原理 词法分析程序_第1页
第1页 / 共7页
编译原理 词法分析程序_第2页
第2页 / 共7页
编译原理 词法分析程序_第3页
第3页 / 共7页
编译原理 词法分析程序_第4页
第4页 / 共7页
编译原理 词法分析程序_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《编译原理 词法分析程序》由会员分享,可在线阅读,更多相关《编译原理 词法分析程序(7页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验报告编译原理实验报告词词 法法 分分 析析 器器姓名:李慧琳姓名:李慧琳班级:计科班级:计科 0903学号:学号:0908030309日期:日期:2012 年年 10 月月1.题目要求:题目要求:1.1 待分析的简单词法(1)关键字begin if then while do end(所有的关键字都是小写。 ) (2)运算符和界符= + - * / = = ; ( ) # (3)其他单词的标识符标识符 ID = letter (letter | digit)*整型常数 NUM = digit digit* 1.2 各种单词符号对应的种别码单词符号种别码 单词符号种别码bgin1:1

2、7If2:=18Then321do523lettet(letter|digi t)*10=24dight dight*11=25+13;2614(27*15)28/16#01.3 词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token 或 sum)构成的序列。 其中 syn 为单词种别码; token 为存放的单词自身字符串; sum 为整型常数。 例如:对源程序 begin x:=9: if x9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如 下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)2

3、.算法分析算法分析2.1 主程序示意图否是图 1(1)关键字表的初值 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表) ,当扫描程 序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般 标识符。关键字表为一个字符串数组,其描述如下: Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”,; (2)程序中用到的主要变量 syn,token 和 sum 2.2 扫描子程序的算法思想 首先设置 3 个变量:token 用来存放构成单词符号的字符串;sum 用来整型单词;syn 用来存放单词符

4、号的种别码。扫描子程序主要部分流程如图 2 所示。置初值调用扫描子程序输出单词二元组输入串结束结束是 是否 字母数字 其他 运算符、 符号 界符等符号否是图 23.程序程序#include #include #include char prog80,token8,ch; int syn,p,m,n,sum;char *rwtab6=“begin“,“if“,“then“,“while“,“do“,“ end“; void scaner(); void main()变量初始化忽略空格是否文件结束? 返回拼数syn=11 11返回对不同符号给 出相应的 syn 值报错拼字符串是否关键字?syn 为

5、对应关键字的 单词种别码syn=10开 始p=0;printf(“n please input a string(end with #):/n“);doscanf(“%c“,progp+=ch;while(ch!=#);p=0;doscaner();switch(syn)case 11:printf(“( %-10d%5d )n“,sum,syn);break;case -1:printf(“you have input a wrong stringn“);getchar();exit(0);default: printf(“( %-10s%5d )n“,token,syn);break;wh

6、ile(syn!=0);getchar();void scaner() sum=0;for(m=0;m=a)|(ch= A) while(ch=a)|(ch=A)|(ch=0)ch=progp+;if(ch=) syn=24;tokenm+=ch;else syn=23;p-;break;case +: tokenm+=ch;ch=progp+;if(ch=+) syn=17;tokenm+=ch;else syn=13;p-;break;case -:tokenm+=ch;ch=progp+;if(ch=-) syn=29;tokenm+=ch;else syn=14;p-;break;ca

7、se !:ch=progp+;if(ch=) syn=21;tokenm+=ch;else syn=31;p-;break;case =:tokenm+=ch;ch=progp+;if(ch=) syn=25;tokenm+=ch;else syn=18;p-;break;case *: syn=15;tokenm+=ch;break;case /: syn=16;tokenm+=ch;break;case (: syn=27;tokenm+=ch; break;case ): syn=28;tokenm+=ch;break;case : syn=5;tokenm+=ch;break;case : syn=6;tokenm+=ch;break;case ;: syn=26;tokenm+=ch; break;case “: syn=30;tokenm+=ch; break;case #: syn=0;tokenm+=ch; break;case :syn=17;tokenm+=ch; break;default: syn=-1; break;tokenm+=0; 4.4 .被编译的原程序 BEGIN x:=10;Y:=12;If(x12)x=x+y; END 5.运行结果

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 计算机原理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号