• 语文科
  • 数学科
  • 英语科
  • 政治科
  • 物理科
  • 化学科
  • 地理科
  • 历史科
  • 生物科
  • 高考试题
  • 中考试题
  • 高考课件
  • 中考课件
  • 高考教案
  • 中考教案
  • 当前位置: 天一资源网 > 分析器 正文

    【算符优先分析器设计实验报告--宁剑】 算符优先分析

    时间:2020-07-25 12:50:38 来源:天一资源网 本文已影响 天一资源网手机站

     精品文档

     装订线

     装

     订

     线

     编译原理实验报告

      题目: 算符优先分析法分析器

     学 院 计算机科学与技术

     专 业 xxxxxxxxxxxxxxxx

     学 号 xxxxxxxxxxxx

     姓 名 宁剑

     指导教师 xxxx

     

     2015年xx月xx日

     算符优先分析法分析器

     一、实验目的?

     1.理解自底向上优先分析,比较和自顶向下优先分析的不同。

     2.理解算符优先分析的特点,体会其和简单优先分析方法的不同。

     3.加深对编译器语法分析的理解。

     二、实验原理?

     1.自底向上优先分析方法,也称移进-归约分析,粗略地说它的思想是对输入符号串自左向右进行扫描,并将输入符号逐个移入一个后进先出栈,边移入边分析,一旦栈顶符号串形成某个句型的句柄或可归约串时,就将该产生式的左部非终极符代替相应的右边文法符号串。

     2.算符优先分析法的基本思想

     首先确定算符(确切地说是终结符)之间的优先关系和结合性质,然后借助这种关系,比较相邻算符之间的优先级来确定句型的可归约串,并进行归约。

     注意:算符优先分析过程是自下而上的归约过程,但它的可归约串未必是句柄,也就是说,算符优先分析过程不是一种规范归约。

     3.终结符号间优先关系的确定,用FIRSTVT和LASTVT计算。

     4.最左素短语

     所谓素短语是指这样一个短语,它至少含有一个终结符,并且除它自身之外不再含有其它素短语。最左素短语是指处于句型最左边的那个素短语。最左素短语是算符优先分析算法的可归约串。

     5.计算得到所给文法的算符优先矩阵

     6.算符优先分析的基本过程

     三、实验要求

     使用算符优先分析算法分析下面的文法:

     E’→#E#

     E→E+T|T

     T→T*F|F

     F→P^F|P

     P→(E)|i

     其中i可以看作是一个终结符,无需作词法分析。具体要求如下:

     1.如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符号串的变化情况;

     2.如果输入符号串不是正确句子,则指示出错位置。

     四、实验结果(程序)及分析

     #include <stdio.h>

     #include <cstring>

     #include <iostream>

     #include <iomanip>

     #define MAX 100

     using namespace std;

     char S[MAX];

     char shuru[MAX],yu[MAX];

     void scanner();

     int panyouxian(char x);

     void shengyuchuan();

     int k;

     char youxian[7][7]=

     {

      {'>','<','<','<','<','>','>'},

      {'>','>','<','<','<','>','>'},

      {'>','>','<','<','<','>','>'},

      {'>','>','>','$','$','>','>'},

      {'<','<','<','<','<','=','$'},

      {'>','>','>','$','$','>','>'},

      {'<','<','<','<','<','$','='},

     }; //优先关系表,其中>为大于,<为小于,=为等于,$为空格

     int main()

     {

      int l,j;

      cout<<"请输入一个字符串:";

      cin.get(shuru,MAX); //将输入的字符串存到数组

      cout<<"步骤 栈 优先关系 当前符号 剩余输入串 移进或归约"<<endl;

      k=0;

      S[k]='#';

      S[k+1]='\0';

      l=strlen(shuru); //求输入字符串的长度

      for(j=0;j<l;j++)

      yu[j]=shuru[j];

      yu[j]='\0';

      scanner();

      return 0;

     }

     void scanner() //扫描分析输入串

     {

      int i,j,l,h1,l1,h2,l2,h3,l3,y1,y2,r1,r2;

      int step=0;//分析步骤数

      char a; //存放正在分析的字符

      char p1,Q,p2;

      l=strlen(shuru); //算出输入串长度

      for(i=0;i<l;i++)

      {

      a=shuru[i];

      if(S[k]=='+'||S[k]=='*'||S[k]=='^'||S[k]=='i'||S[k]=='('||S[k]==')'||S[k]=='#')

      j=k;

      else

      j=k-1;

      h1=panyouxian(S[j]);// 从优先关系表中查出S[j]和a的优先关系

      if(a=='+'||a=='*'||a=='^'||a=='i'||a=='('||a==')'||a=='#')

      l1=panyouxian(a);

      else //如果句子含有不是终结符集合里的其它字符,不合法

      {

      cout<<"错误!不合法的句子!"<<endl;

      break;

      }

      p1=youxian[h1][l1];

      if(p1=='>')

      {

     loop:

      Q=S[j];

      if(S[j-1]=='+'||S[j-1]=='*'||S[j-1]=='^'||S[j-1]=='i'||S[j-1]=='('||S[j-1]==')'||S[j-1]=='#')

      j=j-1;

      else

      j=j-2;

      h2=panyouxian(S[j]);

      l2=panyouxian(Q);

      p1=youxian[h2][l2];

      if(p1=='<') //S[j+1]…S[k]归约为F

      {

      k=j+1;

      shengyuchuan();

      step++;

      cout<<left<<"("<<step<<setw(6)<<")"<<setw(10)<<S<<setw(10)<<p1<<setw(10)<<a<<setw(5)<<right<<yu<<setw(15)<<"归约"<<endl;

      i--;

      S[k]='F';

      r1=strlen(S);

      for(r2=k+1;r2<r2;r2++)

      S[r2]='\0';//多个字符归约,把栈顶后面的舍弃

      y1=strlen(yu);

      for(y2=0;y2<y1;y2++)

      yu[y1-y2]=yu[y1-y2-1];

      yu[0]='i';

      }

      else

      goto

      loop;

      }

      else

      {

      if(p1=='<') //移进如果上一步是不归约,剩余的字符串减少一个

      {

      shengyuchuan();

      shuru[l]='\0';

      step=step+1;

      cout<<left<<"("<<step<<setw(6)<<")"<<setw(10)<<S<<setw(10)<<p1<<setw(10)<<a<<setw(5)<<right<<yu<<setw(15)<<"移近"<<endl;

      k=k+1;

      S[k]=a;

      }

      else

      {

      if(p1=='=')

      {

      h3=panyouxian(S[j]);

      l3=panyouxian('#');

      p2=youxian[h3][l3];

      if(p2=='=')

      {

      shengyuchuan();

      step++;

      cout<<left<<"("<<step<<setw(6)<<")"<<setw(10)<<S<<setw(10)<<p1<<setw(10)<<a<<setw(5)<<right<<yu<<setw(15)<<"接受"<<endl;

      cout<<"合法的句子!"<<endl;;

      break;

      }

      else

      {

      k=k+1;

      S[k]=a;

      }

      }

      else

      {

      cout<<"出错!"<<endl;

      break;

      }

      }

      }

      }

     }

     void shengyuchuan()

     {

      int i,j;

      i=strlen(yu);

      for(j=0;j<i;j++)

      yu[j]=yu[j+1];

      yu[i-1]='\0';

     }

     int panyouxian(char x)

     {

      int m;

      switch(x)

      {

      case'+':

      m=0;

      break;

      case'*':

      m=1;

      break;

      case'^':

      m=2;

      break;

      case'i':

      m=3;

      break;

      case'(':

      m=4;

      break;

      case')':

      m=5;break;

      case'#':

      m=6;

      break;

      }

      return m;

     }

     输入的程序界面如图:

     输入一个正确的句子,结果如下:

     输入一个错误的句子,提示为不合法的句子:

     售后服务方案(赠送)

     1.售后服务概述

      公司长期以来一直致力于提供高质量、完善的支持服务,确保用户的系统稳定运行。

      公司拥有一批资深的施工人员,具有丰富的经验,能够很好的解决设备各类故障,强大的用户支持队伍和良好的用户满意度是我们的一大优势。

      维护计划及承诺  

     ?一、 项目售后服务内容承诺  

      我公司贯彻执行:“诚信正直、成就客户、完善自我、追求卓越”的宗旨,对于已经竣工、验收合格的项目进行质量跟踪服务,本着技术精益求精的精神,向用户奉献一流的技术和一流的维护服务。

     我公司如果承接了端拾器项目,将严格遵循标书及合同的规定,在保证期内向业主提供该项目的责任和义务。在保修期之后,考虑到设备维护的连续性,建议业主与我公司签订维护合同,以确保此系统项目的正常运行所必需的技术支持和管理支持。

     二、 服务与保证期  

     ?在项目验收合格之日起,开始进行售后服务工作,包括以下几个方面:

      1、售后服务期; ?2、维护人员; 3、售后服务项目; 4、服务响应时间。

     ? 三、 售后服务期  

     ? 在项目验收合格之日起,即进入了售后服务期。

     售后服务期=质量保证期+质量维护期

     ? 质量保证期:在质量保证期内,如因质量问题造成的故障,实行免费更换设备、元器件及材料。如因非质量因素造成的故障,收取更换设备、元器件及材料成本费。

     质量维护期:在质量保证期之后,即自行进入质量维护期。

     我方对所承担端拾器项目提供终身质量维护服务,以不高于本合同设备单价的优惠价格提供所需更换的元器件及材料,另收维护人员工本费。

       四、 具体措施承诺  

     ? 1、首先在签订项目合同的同时与客户签订售后服务保证协议书,排除客户的后顾之忧,对客户做出实事求是的、客观的承诺。

     2、对已经验收合格交付用户的端拾器项目,在合同期内与用户进行联系,记录用户使用情况,系统运行状况等进行质量跟踪调查,变被动服务为主动服务。

     3、对已交工的端拾器项目建立系统运行档案,并进行质量跟踪。

     4、系统运行档案记录其端拾器项目运行情况、各类设备使用情况、操作人员操作水平情况及人员流动情况。

     5、针对各用户单位操作人员出现的代表性问题,定期对操作人员进行技术培训或到现场培训及指导。

     6、正在使用中的系统、设备出现故障时,公司维修服务人员接到报告后及时赴现场处理、维修。

     7、对于运行时间较长的端拾器项目,公司维修服务人员定期与客户进行联系询问情况,定期到客户方进行巡视、检查,并做出记录,记录归档保存。

     8、施工保证

     将选派具有丰富经验的技术人员负责端拾器项目具体施工,保证安装质量及系统使用功能,并保证整个系统运行平稳、高效、可靠。

     9、系统保修

     作为项目承包单位,我公司将严格遵循招标文件及合同的规定,向业主提供端拾器项目最终验收合格之日起,在保质期范围内免费维修。

     10、保修期内设备损坏,经鉴定为设备本身原因造成的故障,我方负责免费维修或者更换;同时负责在保修期内定期对设备提供保养维护服务。

     总之,为使业主使用放心、使用方便、保证端拾器项目正常运行,公司全体技术、维护人员本着客户第一的原则,全心全意地为客户着想,全力以赴的进行工作,让我们共同携手,为创造美好的明天而努力工作。

      五、保修服务内容及范围

      我公司将为所承担的各个端拾器项目提供保修服务,有效期从项目验收后,业主在竣工报告上签字之日起。

     1、 响应时间:具体的响应时间将按故障级别划分;

     2、 维修地点:用户现场。

     我公司负责实施的所有系统项目,在正常环境下做适当使用时所发生的故障,我公司将提供约定保修服务。非当前故障,我公司安排提供服务,但需按收费标准另收费用。

     我公司的保修服务仅限于经我公司认定的合格产品。所谓不合格的产品包括:非经我公司供应的产品、非经我公司认定合格的产品及顾客不允许我公司做功能改进的产品。

      下列情况所发生的系统损害不包括在保修服务范围内:

     1、 使用不适当的工具进行系统维护时造成的系统设备损坏;

     2、 现场环境不符合我公司建议的规范;

     3、 意外、自然灾害、疏忽及不当使用、战争、暴动、罢工、雷击或电力故障、顾客搬运不当的损坏,经由非我公司人员或其授权的子承包商对系统进行修改和变动;

     4.设备的维护和信息处理方式。

      六、 系统维护

      1、系统运行管理工作

     为了保证系统能够长时间的正常运行,我们将进行完善的系统培训,同时制定各个系统项目操作规程,并配合业主制定操作人员责任界面及合理的交接班制度。

     2、系统维护保养

     我公司的售后服务人员在维护期内将对贵方的系统项目提供服务,使它们保持良好的运行状态。

     ? 3、月度保养

     ?  坚持月度维护保养,保证每个系统项目机械装置保持最佳工作状态。

      七、维护及服务支持措施

     1、电话支持服务

     电话服务热线号码以我方提供给业主的号码为准(包括电话和传真号码)。如有更改,我方至少在自更改之日起3天内以电子邮件、传真、电话的方式通知业主。

     2、现场排除故障或技术指导

     我方在接到业主的电话支持服务请求后,如果不能通过电话支持服务解决设备或产品发生的技术故障,且经双方商议确认需要进行现场支持的情况下,我方将派专业项目技术人员及时前往现场协助业主排除故障。

      3、电话咨询服务

     对业主在使用设备或产品过程中产生的非故障类问题,我方提供电话咨询服务。

     4、投诉受理服务

      我方在公司设有用户投诉电话

    相关关键词: 分析器
    相关热词搜索: 分析器 优先 实验 报告 设计

    • 范文大全
    • 教案下载
    • 优秀作文
    • 励志
    • 课件
    • 散文
    • 名人名言