欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    实验一 PL O语言的词法分析程序GETSYM.doc

    • 资源ID:2395348       资源大小:24.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验一 PL O语言的词法分析程序GETSYM.doc

    实验一 PL O语言的词法分析程序GETSYM一、实验目的加深和巩固对于词法分析的了解和掌握;初步认识PL/0语言的基础和简单的程序编写;通过本实验能够初步的了解和掌握程序词法分析的整个过程;提高自己上机和编程过程中处理具体问题的能力。二、实验要求实验前先阅读完总体的预备知识以及实验相关的基础知识;要求自己独立完成实验,不得抄袭别人的结果;编写和调试过程中出现的问题做好记录;实验程序调试完成后,用给定的PL0测试程序(test.pl0)进行测试,由老师检查测试结果,并给予相应的成绩;实验完成后,要上交实验报告。三、实验原理PL/O语言的编译程序,是用高级语言PASCAL语言书写的。整个编译过程是由一些嵌套及并列的过程或函数完成。词法分析程序是独立的过程GETSYM完成,供语法分析读单词时使用。语法分析是由过程BLOCK完成。采用自顶向下的递归子程序法。所产生的目标程序为假象栈式计算机的汇编语言。对目标程序的执行是由PASCAL语言书写的解释程序进行的。因此PL/O语言可以在配备PASCAL语言的任何机器上实现。由于PL/O语言编译程序是适合教学用的实例,它的数据类型只有整形数,数据运算只有四则运算。语句有复制语句、条件语句、While型循环语句、输入、输出语句和不带参数允许递归调用过程语句及复合语句。词法分析程序GETSYM的功能包括:1、滤空格,空格在词法分析时是一种不可缺少的界符,而在语法分析时是无用的,所以必须滤掉。2、识别保留子:设有一张保留字表。对每个字母打头的字母、数字字符串要查此表。若查着则为保留字,对应的类别放在SYM中。如IF对应值为THENSYM。3、识别标识符:对用户定义的标识符将IDENT放在SYM中,标识符本身的值放在ID中。4、拼数:当所取单词是数字时,将树的类别NUMBER放在SYM中,数值本身的值放在NUM中。5、拼复合词:对两个字符组成的算符如:=、:=、=等单词,识别后将类别送SYM中。6、打印源程序:为边读入字符边打印。打印每个单词的识别类别(如果是标识符或数字应该给出其值即id和num中的值。图2所示即为给定PL0源程序的一个可能输出)。四、实验环境操作系统为Windows 2000或Dos6.2以上;应用软件为Pascal或C语言。GETCH所用单元说明:CH:存放当前读取的字符,初值为空,LINE:为一维数组,其数组元素是字符;界对为1:80。用于读入一行字符的缓冲区;LL,CC:为计数器,初值为0;GETSYM流程图的工作单元说明:A:一维数组,数组元素为字符,界对1:10;ID:同A;WORD:保留字,一维数组,数组元素为以字符为元素的一维数组。界对为1:13。查表方式采用二分法。五、实验内容阅读所给出的词法分析程序(pl0_lexical.c),搞懂程序中每一个变量的含义,以及每一个过程的作用,并在该过程中进行中文注释;阅读完程序后,画出各过程的流程图;给出的程序包含两处输入错误,利用所给的pl/0源程序(test.pl0)对程序进行调试,使其能正确对所给文件进行分析并能够解释运行;在阅读懂所给出的词法分析程序后,将你对词法分析的理解写在实验报告上。下面简要分析一下词法分析程序的运行流程:主函数main():打开要分析的C源程序,若不能正确打开,则报错。先从源程序中读入一个字符ch,然后进行如下处理:1、ch是字符:转入关键字和标识符处理子函数;2、ch是数字:转入数字处理函数;3、ch是其他字符:转入其他字符处理子函数;结束。关键字和标识符处理子函数alphaprocess(char buffer);1、将buffer送入临时数组alphatp0,再读入一个字符至buffer;2、判断buffer是否为字符或数字,若是,则alphatp1=buffer;3、重复1,2,直到2判断为假;在alphatp末尾添加'message';4、调用search()子函数,在关键字表中匹配alphatp,若匹配成功,则返回序号;5、调用search,在标识符表中匹配alphatp,若匹配成功,则返回序号;6、在标识符表中添加alphatp,并返回序号;源代码:分析程序skh.c程序#include stdio.h main()printf("my name is 08061118 yuchaofeng");主程序:#include stdio.h#include ctype.h#include alloc.h#include stdlib.h#include string.h#define NULL 0FILE*fp;char cbuffer;char*key8="DO","BEGIN","ELSE","END","IF","THEN","VAR","WHILE";char*border6=",",";",":=",".","(",")";char*arithmetic4="+","-","*","/";char*relation6="","=","=","","=","";char*consts20;char*label20;int constnum=0,labelnum=0;int search(char searchchar,int wordtype)int i=0;switch(wordtype)case 1:for(i=0;i=7;i+)if(strcmp(keyi,searchchar)=0)return(i+1);case 2:for(i=0;i=5;i+)if(strcmp(borderi,searchchar)=0)return(i+1);return(0);case 3:for(i=0;i=3;i+)if(strcmp(arithmetici,searchchar)=0)return(i+1);return(0);case 4:for(i=0;i=5;i+)if(strcmp(relationi,searchchar)=0)return(i+1);return(0);case 5:for(i=0;i=constnum;i+)if(strcmp(constsi,searchchar)=0)return(i+1);constsi-1=(char*)malloc(sizeof(searchchar);strcpy(constsi-1,searchchar);constnum+;return(i);case 6:for(i=0;i=labelnum;i+)if(strcmp(labeli,searchchar)=0)return(i+1);labeli-1=(char*)malloc(sizeof(searchchar);strcpy(labeli-1,searchchar);labelnum+;return(i);char alphaprocess(char buffer)int atype;int i=-1;char alphatp20;while(isalpha(buffer)|(isdigit(buffer)alphatp+i=buffer;buffer=fgetc(fp);alphatpi+1='message';if(atype=search(alphatp,1)printf("%s(1,%d)n",alphatp,atype-1);elseatype=search(alphatp,6);printf("%s(6,%d)n",alphatp,atype-1);return(buffer);char digitprocess(char buffer)int i=-1;char digittp20;int dtype;while(isdigit(buffer)digittp+i=buffer;buffer=fgetc(fp);digittpi+1='message';dtype=search(digittp,5);printf("%s(5,%d)n",digittp,dtype-1);return(buffer);char otherprocess(char buffer)int i=-1;char othertp20;int otype,otypetp;othertp0=buffer;othertp1='message';if(otype=search(othertp,3)printf("%s(3,%d)n",othertp,otype-1);buffer=fgetc(fp);goto out;if(otype=search(othertp,4)buffer=fgetc(fp);othertp1=buffer;othertp2='message';if(otypetp=search(othertp,4)printf("%s(4,%d)n",othertp,otypetp-1);goto out;else othertp1='message';printf("%s(4,%d)n",othertp,otype-1);goto out;if(buffer=':')buffer=fgetc(fp);if(buffer='=')printf(":=(2,2)n");buffer=fgetc(fp);goto out;elseif(otype=search(othertp,2)printf("%s(2,%d)n",othertp,otype-1);buffer=fgetc(fp);goto out;if(buffer!='n')&&(buffer!='')printf("%c error,not awordn",buffer);buffer=fgetc(fp);out:return(buffer);void main()int i;for(i=0;i=20;i+)labeli=NULL;constsi=NULL;if(fp=fopen("skh.c","r")=NULL)printf("error");elsecbuffer=fgetc(fp);while(cbuffer!=EOF)if(isalpha(cbuffer)cbuffer=alphaprocess(cbuffer);else if(isdigit(cbuffer)cbuffer=digitprocess(cbuffer);else cbuffer=otherprocess(cbuffer);printf("overn");测试分析:1、做实验时开始运行程序一直得不出结果(结果为空,什么都没有),检查发现是由于没有保存测试程序,只运行主程序所以得不出结果。2、运行结果出来了,但却无法试运行结果显示在屏幕上,经分析调试后发现,是由于自己把需要运行的程序保存在了含有中文名的文件夹下,导致运行结果只是瞬间跳过(显示)而无法显示。运行结果如下:

    注意事项

    本文(实验一 PL O语言的词法分析程序GETSYM.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开