算符优先分析算法
设计一个算符优先分析器,理解优先分析方法的原理。重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
数学与计算机学院编译原理实验报告
年级 09软工学号姓名 成绩 专业软件工程实验地点主楼指导教师湛燕
实验项目算符优先关系算法实验日期2012.6.6
一、实验目的和要求
设计一个算符优先分析器,理解优先分析方法的原理。
重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
二、实验内容
使用算符优先分析算法分析下面的文法:
E’ → #E#
E → E+T | T
T → T*F | F
F → P^F | P
P → (E) | i
其中i可以看作是一个终结符,无需作词法分析。具体要求如下:
1、如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符号串的变化情况;
2、如果输入符号串不是正确句子,则指示出错位置。
三、程序设计
全局变量有一下几个:
static string input;//记录输入串
char s[20];//栈
int top=-1;//栈顶指针
有三个函数:
int analyze(string input);//分析输入的串是否符合标准
void process();//进行归约的函数
int main()
input是一个全局变量,记录输入串,用analyze(input)分析输入的是不是符合标准的字符串,(例如“i+i*i^(i+i)”)如果不符合标准,提示用户重新输入。
进行归约的函数主要思想是:先构造优先关系矩阵,有“<”,“>”,“=”和空格四种关系。Char a 记录栈中最高位的终结符,如果栈中是#E+E,则a 的赋
设计一个算符优先分析器,理解优先分析方法的原理。重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
值是“+”,如果形如“#E+”或“#E+i”则a 赋值“+”或“i”。charnowchar 记录当前的字符。a 与 nowchar 按照算符优先关系矩阵找出优先关系。如果优先关系是“<”,则进行移进;如果优先关系是“>”,则进行归约;如果是“=”,则去掉括号或分析成功。
五、代码和截图
自己编写代码如下:
#include <iostream>
#include <string>
using namespace std;
static string input;//输入串
char s[20];//栈
int top=-1;//栈顶指针
char VT[7]={'+','*','^','i','(',')','#'};//终结符
static char matrix[7][7]={
'>','<','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>',' ',' ','>','>',
'<','<','<','<','<','=',' ',
'>','>','>',' ',' ','>','>',
'<','<','<','<','<',' ','='}; //优先关系矩阵,不存在优先关系时为空格
int analyze(string input);//分析输入的串是否符合标准
void process();//规约
int main()
{
//cout<<"输入一个符号串!"<<endl;
int flag=1;
while(flag==1)
{
cout<<"输入一个符号串!"<<endl;
cin>>input;
if(analyze(input)==0)
flag=1;
else
flag=0;
}
cout<<"**********************************************************
设计一个算符优先分析器,理解优先分析方法的原理。重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
*"<<endl;
cout<<" 表达式文法算符优先关系表"<<endl;
cout<<endl;
for(inti=0;i<8;i++)
{
cout<<" "<<VT[i];
}
cout<<endl;
cout<<endl;
for(i=0;i<7;i++)
{
cout<<VT[i];
for(int j=0;j<7;j++)
{
cout<<" ";
cout<<matrix[i][j];
}
cout<<endl;
}
//cout<<<<endl;
cout<<"***********************************************************"<<endl;
cout<<"对输入串"<<input<<"的算符优先分析过程如下:"<<endl; process();
cout<<""<<endl;
//cout<<" 栈"<<" 优先关系"<<" 当前符号"<<" 剩余输入串"<<" 移进或规约"<<endl;
cout<<""<<endl;
cout<<""<<endl;
cout<<""<<endl;
return 1;
}
int analyze(string input)//分析输入的串是否符合标准
{
//cout<<input[0]<<input[1]<<input[2]<<input[3]<<endl; intlen = input.length();//获得输入串长度
//cout<<len<<endl;
int flag=0;
//char t;//
//char temp;
for(inti=0;i<len;i++)
{
设计一个算符优先分析器,理解优先分析方法的原理。重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
if((input[len-1]!='i')&&(input[len-1]!=')')) { flag=1;break; }//cout<<input[len-1]<<endl; switch(input[i]) { case '(': if(i==0) {} else if(input[i-1]=='^'||'+'||'*') {} else flag=1; break; case ')': if(input[i-1]=='i') {} else flag=1; break; case '*': if(input[i-1]=='i'||')') {}//cout<<i<<flag<<endl; else flag=1; break; case '^': if(input[i-1]=='i'||')') {}//cout<<i<<flag<<endl; else flag=1; break; case '+': if(input[i-1]=='i'||')') {}//cout<<i<<flag<<endl; else flag=1; break; case 'i': { if(input[len-1]=='i') flag=1; else {}
设计一个算符优先分析器,理解优先分析方法的原理。重点和难点:本实验的重点是理解优先分析方法的原理;难点是如何构造算符优先关系。
}// cout<<i<<flag<<"输入的是正确的字符串!"<<endl; break;
default:
// cout<<flag<<endl;
flag=1;
break;
}
}
//int flag=0;
if(flag==0)
{cout<<"输入的是正确的句子!"<<endl;return 1;}
else
{cout<<"输入的是错误的句子!"<<endl;return 0;}
}
相关推荐:
- [专业资料]《蜜蜂之家》教学反思
- [专业资料]过去分词作定语和表语1
- [专业资料]苏州工业园区住房公积金贷款申请表
- [专业资料]保安管理制度及处罚条例细则
- [专业资料]2018年中国工程咨询市场发展现状调研及
- [专业资料]2015年电大本科《学前教育科研方法》期
- [专业资料]数字信号处理实验 matlab版 离散傅里叶
- [专业资料]“十三五”重点项目-虎杖白藜芦醇及功
- [专业资料]2015-2020年中国竹木工艺市场需求及投
- [专业资料]国际贸易理论与实务作业五:理论案例分
- [专业资料]财政部修订发布事业单位会计制度
- [专业资料]BCA蛋白浓度测定试剂盒(增强型)
- [专业资料]工程进度总计划横道图模板(通用版)
- [专业资料]七年级地理同步练习(天气与气候)
- [专业资料]X光安检机介绍火灾自动报警系统的组成
- [专业资料]衢州市人民政府办公室关于印发衢州市区
- [专业资料]经济全球化及其影响[1]
- [专业资料]质粒DNA限制性酶切图谱分析
- [专业资料]国家安全人民防线工作“六项”制度
- [专业资料]劳动力投入计划及保证措施
- 电子账册联网监管培训手册
- 人教版语文七年级上第1课《在山的那边
- 对我区担保行业发展现状的思考与建议
- 平面四边形网格自动生成方法研究
- 2016年党课学习心得体会范文
- 如何设置电脑定时关机
- 全球最美人妖排行榜新鲜出炉
- 社会实践调查报告及问卷
- Visual Basic习题集
- 《鱼我所欲也》课件2
- 浙江省会计从业资格考试试卷
- 全遥控数字音量控制的D 类功率放大器资
- 鞍钢宪法与后福特主义
- 电表的改装与校准实验报告(1)
- 2014年高考理科数学真题解析分类汇编:
- Windows 7 AIK 的使用
- 风电场全场停电事故应急处置方案
- 化工原理选填题题库(下)
- 关于产学研合作教育模式的学习与思考
- 西安先锋公馆项目前期定位报告




