实验题目----预测分析方法
编译原理预测分析法实验报告
编译原理实验预测分析法姓名**学号**班级**完成日期**1.实验目的加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。
2.实验要求1.对语法规则有明确的定义;2.编写的分析程序能够对实验一的结果进行正确的语法分析;3. 3.对于遇到的语法错误, 能够做出简单的错误处理, 给出简单的错误提示, 保证顺利完成语法分析过程;4. 4.实验报告要求用文法的形式对语法定义做出详细说明, 说明语法分析程序的工作过程, 说明错误处理的实现。
5.实验原理对文法G进行语法分析, 文法G如下所示:*0. S→a */*1. S→.*2. S→(T)*3. T→SW **4..W→,S.*5. W→ε;6.软件设计与编程#include <stdio.h>#include <stdlib.h>#include <string.h>char str[100]; //存储待分析的句子const char T[ ] = "a^(),#"; //终结符, 分析表的列符const char NT[ ] = "STW"; //非终结符, 分析表的行符/*指向产生式右部符号串*/const char *p[] = {/*0. S→a */ "a",/*1.. S→. *. "^",/*2. S→(T) */ "(T)",/*3. T→SW */ "SW",/*4.. W→,S. */ ",SW",/*5. W→ε; */ ""};//设M[i][j]=x, 通过p[M[i][j]]=p[x]获取右部符号串。
const int M[][6] = {/* a ^ ( ) , # *//*S*/ { 0, 1, 2, -1, -1, -1 },/*T*/ { 3, 3, 3, -1, -1, -1 },/*W*/ { -1, -1,-1, 5, 4, -1 }};void init()//输入待分析的句子{printf("请输入待分析的句子(以$结束): \n");scanf("%s",str);}int lin(char c);//非终结符转换为行号int col(char c);//终结转换为列号bool isNT(char c);//isNT判断是否是非终结符bool isT(char c);//isT判断是否是终结符。
实验二--LL分析法实验报告
实验二LL(1)分析法一、实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。
使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。
有利于提高学生的专业素质,为培养适应社会多方面需要的能力。
二、实验内容及设计原理所谓LL(1)分析法,就是指从左到右扫描输入串(源程序),同时采用最左推导,且对每次直接推导只需向前看一个输入符号,便可确定当前所应当选择的规则。
实现LL(1)分析的程序又称为LL(1)分析程序或LL1(1)分析器。
我们知道一个文法要能进行LL(1)分析,那么这个文法应该满足:无二义性,无左递归,无左公因子。
当文法满足条件后,再分别构造文法每个非终结符的FIRST和FOLLOW集合,然后根据FIRST和FOLLOW集合构造LL(1)分析表,最后利用分析表,根据LL(1)语法分析构造一个分析器。
LL(1)的语法分析程序包含了三个部分,总控程序,预测分析表函数,先进先出的语法分析栈,本程序也是采用了同样的方法进行语法分析,该程序是采用了C++语言来编写,其逻辑结构图如下:LL(1)预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号a做哪种过程的。
对于任何(X,a),总控程序每次都执行下述三种可能的动作之一:(1)若X = a =‘#’,则宣布分析成功,停止分析过程。
(2)若X = a ‘#’,则把X从STACK栈顶弹出,让a指向下一个输入符号。
(3)若X是一个非终结符,则查看预测分析表M。
若M[A,a]中存放着关于X的一个产生式,那么,首先把X弹出STACK栈顶,然后,把产生式的右部符号串按反序一一弹出STACK栈(若右部符号为ε,则不推什么东西进STACK栈)。
若M[A,a]中存放着“出错标志”,则调用出错诊断程序ERROR。
三、程序结构描述1、定义的变量初始化预测分析表:LL E[8]={"TG","TG","error","error","error","error","error","error"}; LL G[8]={"error","error","null","+TG","-TG","error","error","null"}; LL T[8]={"FS","FS","error","error","error","error","error","error"}; LL S[8]={"error","error","null","null","null","*FS","/FS","null"};LL F[8]={"i","(i)","error","error","error","error","error","error"}; const int MaxLen=10; 初始化栈的长度const int Length=10; 初始化数组长度char Vn[5]={'E','G','T','S','F'}; 非终结符数组char Vt[8]={'i','(',')','+','-','*','/','#'}; 终结符数组char ch,X; /全局变量,ch用于读当前字符,X用于获取栈顶元素char strToken[Length]; 存储规约表达式2、定义的函数class stack 栈的构造及初始化int length(char *c) 输出字符数组的长度void print(int i,char*c) 剩余输入串的输出void run() 分析程序3、LL(1)预测分析程序流程图四、程序源代码及运行结果#include<iostream>using namespace std;const int MaxLen=10; //初始化栈的长度const int Length=10;//初始化数组长度char Vn[5]={'E','G','T','S','F'};//非终结符数组char Vt[8]={'i','(',')','+','-','*','/','#'};//终结符数组char ch,X;//全局变量,ch用于读当前字符,X用于获取栈顶元素char strToken[Length];//存储规约表达式struct LL//ll(1)分析表的构造字初始化{char*c;};LL E[8]={"TG","TG","error","error","error","error","error","error"}; LL G[8]={"error","error","null","+TG","-TG","error","error","null"}; LL T[8]={"FS","FS","error","error","error","error","error","error"}; LL S[8]={"error","error","null","null","null","*FS","/FS","null"};LL F[8]={"i","(i)","error","error","error","error","error","error"}; class stack//栈的构造及初始化{public:stack();//初始化bool empty() const;//是否为空bool full() const;//是否已满bool get_top(char &c)const;//取栈顶元素bool push(const char c);//入栈bool pop();//删除栈顶元素void out();//输出栈中元素~stack(){}//析构private:int count;//栈长度char data[MaxLen];//栈中元素};stack::stack(){count=0;}bool stack::empty() const{if(count==0)return true;return false;}bool stack::full() const{if(count==MaxLen)return true;return false;}bool stack::get_top(char &c)const{if(empty())return false;else{c=data[count-1];return true;}}bool stack::push(const char c){if(full())return false;data[count++]=c;return true;}bool stack::pop(){if(empty())return false;count--;return true;}void stack::out(){for(int i=0;i<count;i++)cout<<data[i];cout<<" ";}int length(char *c){int l=0;for(int i=0;c[i]!='\0';i++)l++;return l;}void print(int i,char*c)//剩余输入串的输出{for(int j=i;j<Length;j++)cout<<c[j];cout<<" ";}void run(){bool flag=true;//循环条件int step=0,point=0;//步骤、指针int len;//长度cout<<"请输入要规约的字符串:"<<endl;cin>>strToken;ch=strToken[point++];//读取第一个字符stack s;s.push('#');//栈中数据初始化s.push('E');s.get_top(X);//取栈顶元素cout<<"步骤"<<"分析栈"<<"剩余输入串"<<"所用产生式"<<"动作"<<endl;cout<<step++<<" ";s.out();print(point-1,strToken);cout<<" "<<"初始化"<<endl;while(flag){if((X==Vt[0])||(X==Vt[1])||(X==Vt[2])||(X==Vt[3])||(X==Vt[4])||(X==Vt[5])||(X==V t[6])) //判断是否为终结符(不包括#){if(X==ch)//终结符,识别,进行下一字符规约{s.pop();s.get_top(X);ch=strToken[point++];cout<<step++<<" ";s.out();print(point-1,strToken);cout<<" "<<"GETNEXT(I)"<<endl;}else{flag=false;cout<<"error!"<<endl;}}else if(X=='#')//规约结束{if(X==ch){cout<<step++<<" ";s.out();print(point-1,strToken);cout<<" "<<X<<"->"<<ch<<" "<<"结束"<<endl;s.pop();flag=false;}else{flag=false;cout<<"error!"<<endl;}}else if(X==Vn[0]) //非终结符E{for(int i=0;i<8;i++)//查分析表if(ch==Vt[i]){if(strcmp(E[i].c,"error")==0)//出错{flag=false;cout<<"error"<<endl;}else{ //对形如X->X1X2的产生式进行入栈操作s.pop();len=length(E[i].c)-1;for(int j=len;j>=0;j--)s.push(E[i].c[j]);cout<<step++<<" ";s.out();print(point-1,strToken);cout<<X<<"->"<<E[i].c<<" "<<"POP,PUSH(";for(int z=len;z>=0;z--)cout<<E[i].c[z];cout<<")"<<endl;s.get_top(X);}}}else if(X==Vn[1]) //同上,处理G{for(int i=0;i<8;i++)if(ch==Vt[i]){if(strcmp(G[i].c,"null")==0){s.pop();cout<<step++<<" ";s.out();print(point-1,strToken);cout<<" "<<X<<"->"<<"ε"<<" "<<"POP"<<endl;s.get_top(X);}else if(strcmp(G[i].c,"error")==0){flag=false;cout<<"error"<<endl;}else{s.pop();len=length(G[i].c)-1;for(int j=len;j>=0;j--)s.push(G[i].c[j]);cout<<step++<<" ";s.out();print(point-1,strToken);cout<<X<<"->"<<G[i].c<<" "<<"POP,PUSH(";for(int z=len;z>=0;z--)cout<<G[i].c[z];cout<<")"<<endl;s.get_top(X);}}}else if(X==Vn[2]) //同上处理T{for(int i=0;i<8;i++)if(ch==Vt[i]){if(strcmp(T[i].c,"error")==0){flag=false;cout<<"error"<<endl;}else{s.pop();len=length(T[i].c)-1;for(int j=len;j>=0;j--)s.push(T[i].c[j]);cout<<step++<<" ";s.out();print(point-1,strToken);cout<<X<<"->"<<T[i].c<<" "<<"POP,PUSH(";for(int z=len;z>=0;z--)cout<<T[i].c[z];cout<<")"<<endl;s.get_top(X);}}}else if(X==Vn[3])//同上处理S{for(int i=0;i<8;i++)if(ch==Vt[i]){if(strcmp(S[i].c,"null")==0){s.pop();cout<<step++<<" ";s.out();print(point-1,strToken);cout<<" "<<X<<"->"<<"ε"<<" "<<"POP"<<endl;s.get_top(X);}else if(strcmp(S[i].c,"error")==0){flag=false;cout<<"error"<<endl;}else{s.pop();len=length(S[i].c)-1;for(int j=len;j>=0;j--)s.push(S[i].c[j]);cout<<step++<<" ";s.out();print(point-1,strToken);cout<<X<<"->"<<S[i].c<<" "<<"POP,PUSH(";for(int z=len;z>=0;z--)cout<<S[i].c[z];cout<<")"<<endl;s.get_top(X);}}}else if(X==Vn[4]) //同上处理F{for(int i=0;i<7;i++)if(ch==Vt[i]){if(strcmp(F[i].c,"error")==0){flag=false;cout<<"error"<<endl;}else{s.pop();len=length(F[i].c)-1;for(int j=len;j>=0;j--)s.push(F[i].c[j]);cout<<step++<<" ";s.out();print(point-1,strToken);cout<<X<<"->"<<F[i].c<<" "<<"POP,PUSH(";for(int z=len;z>=0;z--)cout<<F[i].c[z];cout<<")"<<endl;s.get_top(X);}}}else //出错处理{flag= false;cout<<"error"<<endl;}}}int main(){run();system("pause");return 0;}测试:输入i*i+i#结果:实验二--LL(1)分析法实验报告五、实验总结1. 本实例能利用正确的LL1文法分析表判断任意符号串是否属于该文法的句子;显示了具体分析过程;支持打开、新建、保存分析表;保存分析结果。
实验四 非递归预测分析
《编译原理实验》—LR分析器院、系(部) 计算机科学与技术学院专业及班级计算机科学与技术专业1403班学号 1408030322姓名朱浩日期 2017年5月29日一、实验目的与任务设计一个非递归预测分析器,实现对表达式语言的分析,理解自上而下语法分析方法的基本思想,掌握设计非递归预测分析器的基本方法。
二、实验要求建立文法及其LL(1)分析表表示的数据结构,设计并实现相应的预测分析器,对源程序经词法分析后生成的二元式代码流进行预测分析,如果输入串是文法定义的句子则输出“是”,否则输出“否”。
三、文法描述及其LL(1)分析表表达式语言(XL) 的语法规则如下:1.程序→ 表达式;2. |表达式;程序3.表达式→ 表达式 + 项4. |项5.项→ 项 * 因式6. |因式7.因式→ num_or_id8. |(表达式)将该语言的文法转换为如下的LL(1)文法:1prgm → expr;prgm’ 8 term → factor term’2prgm’ → prgm 9 term’ → *factor term’3prgm’ →ε 10 term’ →ε4expr → term expr’ 11 factor → (expr)5expr →ε 12 factor → num6expr’ → +term expr’ 13 system_goal → prgm7expr’ →ε四、文法及其LL(1)分析表的数据结构文法的产生式可用数组Yy_pushtab[]存放。
数组的第一个下标是产生式号,第一个产生式的序号为0;每列按逆序存放该产生式右部各符号的常数值,并以0结束。
对于该表达式语言XL的LL(1)分析表,可用数组Yy_d[]存放。
第一个下标是非终结符数值,第二个下标是终结符数值,数组元素的值为:0(表示接受) ,1(表示产生式号) ,-1(表示语法错) 。
数组Yy_d[]的具体内容及表示如下:0 1 2 3 4 5 6prgm 256prgm’ 257expr 258term 259expr’ 260factor 261term’ 262system_goal 263数组Yy_pushtab[]的具体内容及表示如下:五、预测分析器总控程序结构预测分析器总控程序使用上面的两个表Yy_pushtab、Yy_d和一个分析栈(元素类型为int) ,其结构如下:初始化;/* 把开始符号的常数值压入分析站,输入指向第一个输入符号*/while(分析栈非空) {if(栈顶常数表示一个终结符)if(该常数与输入符号的常数不等)报语法错;else {把一个数从栈顶弹出;advance读下一输入符号;}else { /* 栈顶的常数表示一个非终结符 */what_to_do=Yy_d[栈顶常数][当前输入符号的常数];if(what_to_do== -1)报语法错;else {把栈顶元素弹出栈;把Yy_pushtab[what_to_do]中列出的全部常数压入分析栈;}}}请实现该程序。
《需求预测》实验报告
教育部使用信息技术工具改造项目运作管理Operations management模块:需求预测目录第一部分:建模基础(理论基础) (3)引言 (3)教学目的 (3)基本知识要求 (3)教学需要时间 (4)模型背景: (5)模型描述 (5)模型数据....................................................................................................错误!未定义书签。
第二步部分计算操作.. (8)打开软件 (11)Step 1: 题目 (16)Step 2: 题目 (16)Step 3: 题目..............................................................................................错误!未定义书签。
Step n: 题目..............................................................................................错误!未定义书签。
第三部分总结与习题........................................................................ 错误!未定义书签。
题目:如“需求预测计算/模型/方法”使用说明第一部分:建模基础引言需求预测是根据企业过去和现在的需求状况以及影响市场需求变化的因素之间的关系,利用一定的经验判断、技术方法和预测模型,应用合适的科学方法对有关反映市场需求指标的变化以及发展的趋势进行预测。
精确的需求预测可以促进企业信息系统和生产设施能力的计划和协调。
并且通过需求预测可以确定产品是如何在供应链的各个节点企业中间分配的。
为明确责任,衡量需求预测的效果,开展需求预测需要建立一套包括组织、程序、动机以及人事等方面的完善的预测的行政管理体制,以支持预测活动的顺利开展,在此基础上选择预测技术,实施预测过程并对其过程实行有效监控教学目的:理解市场需求预测的基本原理,掌握定量预测方法的计算步骤;.能够根据实际情况合理选用预测方法,对产品或服务的需求进行估计,为其它的运作管理提供充足的数据支持。
语法分析-预测分析方法
实验2-1 语法分析—预测分析方法一、实验目的使用预测分析方法编制分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
了解预测分析法和递归子程序法的区别和联系,培养动手实践的能力。
二、实验内容使用预测分析法分析一段程序代码。
如果符合文法定义,程序输出“是”,否则输出“否”。
由于预测分析和递归子程序都是自顶向下的分析方法,这里给出无回溯的和无左公因子的文法。
无左递归和无左公因子的BNF如下:<程序>→<程序首部><分程序>.<程序首部>→PROGRAM 标识符;<分程序>→<常量说明部分><变量说明部分><过程说明部分><复合语句><常量说明部分>→CONST<常量定义><常量定义后缀>;|ε<常量定义>→标识符=无符号整数<常量定义后缀>→, <常量定义><常量定义后缀>|ε<变量说明部分>→V AR<变量定义><变量定义后缀>|ε<变量定义>→标识符<标识符后缀>:<类型>;<标识符后缀>→,标识符<标识符后缀>|ε<变量定义后缀>→<变量定义><变量定义后缀>|ε<类型>→INTEGER|LONG<过程说明部分>→<过程首部><分程序>;<过程说明部分后缀>|ε<过程首部>→PROCEDURE 标识符<参数部分>:<参数部分>→(标识符:<类型>)|ε<过程说明部分后缀>→<过程首部><分程序>;<过程说明部分后缀>|ε<语句>→<赋值或调用语句>|<条件语句>|<当型循环语句>|<读语句>|<写语句>|<复合语句><赋值或调用语句>→标识符<后缀><后缀>→:=<表达式>|(<表达式>)|ε<条件语句>→IF<条件>THEN<语句><当型循环语句>→WHILE<条件>DO<语句><读语句>→READ (标识符<标识符后缀>)<写语句>→WR ITE (表达式<表达式后缀>)<表达式后缀>→, <表达式><表达式后缀>|ε<复合语句>→BEGIN <语句><语句后缀>END<语句后缀>→; <语句><语句后缀>|ε<条件>→ <表达式><关系运算符><表达式>|ODD<表达式><表达式>→+<项><项后缀>|-<项><项后缀>|<项><项后缀><项后缀>→<加型运算符><项><项后缀>|ε<项>→<因子><因子后缀><因子后缀>→<乘型运算符><因子><因子后缀>|ε<因子>→标识符|无符号整数|(<表达式>)<加型运算符>→+|-<乘型运算符>→*|/<关系运算符>→=|<>|<|<=|>|>=为了将非终结符和终结符一起存入栈,将非终结符的内码从128开始标记。
PL0编译程序实例资料
‘{ }’ 表示花括号内的语法成分可以重复;在不加上 下界时可重复0到任意次数,有上下界时为可重复次 数的限制
‘[ ]’ 表示方括号内的成分为任选项 ‘( )’ 表示圆括号内的成分优先
PL/0 语言的语法描述图
程序 分程序
const , ; var , ; ; procedure ident ; ident
《编译原理》
例:程序和分程序语法单位的语法描述图
分程序
ident
=
.
number
分程序
语句
PL/0 语言的EBNF表示
EBNF 的元符号
《编译原理》
‘< >’ 是用左右尖括号括起来的中文字表示语法构
实验题目
题目二:预测分析法的实现(3周+1周)
《编译原理》
按预测分析法(即LL(1)分析法)构造语法分析器,并对输入串进行 预测分析
要求及步骤 (1)输入任一给定文法; (2)消除左公共因子和左递归; (3)构造该文法非终结符的FIRST集和FOLLOW集; (4)判断该文法是否为LL(1)文法; (5)若是LL(1)文法,构造该文法的预测分析表; (6)按预测分析法,构造该文法的语法分析器; (7)若是LL(1)文法,输入任一符号串,给出输入串的分析过程和结 果。
PL/0 语言的EBNF表示
例:PL/0 语言的EBNF表示片断
<程序> ::= <分程序>. <分程序> ::= [<常量说明部分>] [<变量说明部分>] [<过程说明部分>] <语句>
预测分析程序实验报告
预测分析程序实验报告题⽬:预测分析法⼀、实验⽬的1、通过实验要学会⽤消除左递归和消除回溯的⽅法来使⽂法满⾜进⾏确定⾃顶向下分析的条件;2、学会⽤C/C++⾼级程序设计语⾔编写⼀个LL(1)分析法程序⼆、实验内容及要求LL(1)预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输⼊符号a做哪种过程的。
对于任何(X,a),总控程序每次都执⾏下述三种可能的动作之⼀:(1)若X = a =‘#’,则宣布分析成功,停⽌分析过程。
(2)若X = a ‘#’,则把X从STACK栈顶弹出,让a指向下⼀个输⼊符号。
(3)若X是⼀个⾮终结符,则查看预测分析表M。
若M[A,a]中存放着关于X的⼀个产⽣式,那么,⾸先把X弹出STACK栈顶,然后,把产⽣式的右部符号串按反序⼀⼀弹出STACK栈(若右部符号为ε,则不推什么东西进STACK栈)。
若M[A,a]中存放着“出错标志”,则调⽤出错诊断程序ERROR。
1、给定⽂法S -> a | b | (T)T -> SH | dH -> ,SH | ε2、该⽂法对应的预测分析表3、编写预测分析程序对句⼦进⾏分析三、试验程序设计说明1、相关函数说明分析栈可以采取许多的存储⽅法来设计,在这⾥采⽤的顺序栈。
根据预测分析原理,LL(1)分析程序的实现关键在于分析栈和分析表是采⽤何种数据结构来实现。
分析表是⼀个矩阵,当我们要调⽤分析表来分析时,就根据栈顶的⾮终结符和当前输⼊的终结符来决定执⾏哪种过程。
具体设计思想如下:printStack()输出分析栈内内容;printinputString()输出⽤户输⼊的字符串;Pop()弹出栈顶元素;Push()向栈内添加⼀个元素;Search()查找⾮终结符集合VT 中是否存在输⼊的⾮终结符;yuCeFenXi()进⾏输⼊串的预测分析的主功能函数;M(char A, char a)查看预测分析表M[A,a]中是否存在相应产⽣式。
编译原理预测分析法C语言的实验报告
题目:编写识别由下列文法所定义的表达式的预测分析程序。
E→E+T | E-T | TT→T*F | T/F |FF→(E) | i输入:每行含一个表达式的文本文件。
输出:分析成功或不成功信息。
(题目来源:编译原理实验(三)--预测(LL(1))分析法的实现)解答:(1)分析a) ∵E=>E+T=>E+T*F=>E+T*(E)即有E=>E+T*(E)存在左递归。
用直接改写法消除左递归,得到如下:E →TE’ E’ →+TE’ | −TE’|εT →FT’ T’ →*FT’ | /FT’|εF → (E) | i对于以上改进的方法。
可得:对于E’:FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,−,ε}对于T’:FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε} 而且:FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }由此我们容易得出各非终结符的FOLLOW集合如下:FOLLOW( E )= { ),#}FOLLOW(E’)= FOLLOW(E)={ ),#}FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,−,),#}FOLLOW( T’ ) = FOLLOW( T ) ={+,−,),#}FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,−,),#}由以上FOLLOW集可以我们可以得出SELECT集如下:对E SELECT(E→TE’)=FIRST(TE’)=FIRST(T)={ (,i }对E’ SELECT(E’ →+TE’)={ + }SELECT(E’ →−TE’)={ − }SELECT(E’ →ε)={ε,),#}对T SELECT(T→FT’)={(,i}对T’ SELECT(T’ →*FT’)={ * }SELECT(T’ →∕FT’)={ ∕ }SELECT(T’ →ε)={ε,+,−,),#}对F SELECT(F→(E) )={ ( }SELECT(F→i)={ i }∴SELECT(E’ →+TE’)∩SELECT(E’ →−TE’)∩SELECT(E’ →ε)=ΦSELECT(T’ →*FT’)∩SELECT(T’ →∕FT’)∩SELECT(T’ →ε)=ΦSELECT(F→(E) )∩SELECT(F→i)= Φ由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。
专题08实验设计专题题型及解题技巧
专题08 实验设计专题题型及解题技巧目录导航一、真题考法归纳考法01 实验变量分析考法02 正确写出实验目的考法03 准确写出实验原理考法04 完整写出实验思路与实验步骤考点05 实验结果与结论的预测与分析二、常考热点实验梳理三、实验热点专练1.(2023·山东·高考真题)当植物吸收的光能过多时,过剩的光能会对光反应阶段的PSⅡ复合体(PSⅡ)造成损伤,使PSⅡ活性降低,进而导致光合作用强度减弱。
细胞可通过非光化学淬灭(NPQ)将过剩的光能耗散,减少多余光能对PSⅡ的损伤。
已知拟南芥的H蛋白有2个功能:①修复损伤的PSⅡ;②参与NPQ的调节。
科研人员以拟南芥的野生型和H基因缺失突变体为材料进行了相关实验,结果如图所示。
实验中强光照射时对野生型和突变体光照的强度相同,且强光对二者的PSⅡ均造成了损伤。
(1)该实验的自变量为。
该实验的无关变量中,影响光合作用强度的主要环境因素有(答出2个因素即可)。
(2)根据本实验,(填“能”或“不能”)比较出强光照射下突变体与野生型的PSⅡ活性强弱,理由是。
(3)据图分析,与野生型相比,强光照射下突变体中流向光合作用的能量(填“多”或“少”)。
若测得突变体的暗反应强度高于野生型,根据本实验推测,原因是。
浓度、温度【答案】(1) 光、H蛋白 CO2(2)不能突变体PSⅡ系统光损伤小但不能修复,野生型光PSⅡ系统损伤大但能修复(3)少突变体PNQ高,PSⅡ系统损伤小,虽然损伤不能修复,但是PSⅡ活性高,光反应产物多【解析】(1)据题意拟南芥的野生型和H基因缺失突变体为材料进行了相关实验,实验中强光照射时对野生型和突变体光照的强度相同,结合题图分析实验的自变量有光照、H蛋白;影响浓度、温度、水分等。
光合作用强度的主要环境因素有CO2(2)据图分析,强光照射下突变体的NPQ/相对值比野生型的NPQ/相对值高,能减少强光对PSⅡ复合体造成损伤。
但是野生型含有H蛋白,能对损伤后的PSⅡ进行修复,故不能确定强光照射下突变体与野生型的PSⅡ活性强弱。
实验心理学期末复习整理(考试题红笔标出)
实验⼼理学期末复习整理(考试题红笔标出)第⼀章引论1、1879年,冯特在莱⽐锡⼤学建⽴了第⼀个正式的⼼理实验室,标志着实验⼼理学的建⽴。
2、实验⼼理学的重要性:是各门⼼理学的基础3、观察法与实验法:观察法只能对已有的事物进⾏观察,实验法是研究者主动控制条件下对事物的观察实验法的特点:①可控性②可重复性(结果可检验)③可以进⾏因果的推理(实验法最重要的特点)4、实验范式:以范式是指按照某⼀⽐较公认的路线或观点所采取的研究⽅向或研究步骤【例】①斯楚普实验②加⼯⽔平效应③补笔④记忆研究中对偶联合范式(已经停⽤)5、⼼理学规律的性质定量研究:将数据定量表⽰,并将结果从样本推⼴到所研究的总体定性研究:依据⼀定的理论与经验,直接抓住事物特征的主要⽅⾯,从事物的内在规定性来研究事物6、实验⼼理学研究的⼀般伦理:实事求是的科学精神和严谨审慎的⼯作作风7、研究⼈类被试的伦理原则:①保障被试的知情同意权②保障被试退出的⾃由③保护被试免遭伤害④保密原则8、实验⼼理学研究的⼀般程序(每个标题后⾯要再写⼀句话解释)(1)确定课题、形成假设(怎么来确定课题,课题的来源:有些实际需要、⽂献综述、理论综述)(2)选择被试:选择有代表性的被试,采⽤随机化原则,再写⼏条随机化的⽅法(3)实验实施:确定实验控制,⾃变量、因变量、额外变量都要进⾏控制,对随机变量尤其是额外变量进⾏控制(4)数据处理:不同的实验设计对应不同的实验处理⽅式,把对应的实验处理⽅式写⼀下(5)报告撰写:⾃由发挥第⼆章实验研究的基本问题⼀、主试和被试(对结果产⽣影响的情况:①主试对被试的影响②主试的态度③被试的态度)(⼀)主试对被试的影响1、主试通过指导语对被试产⽣影响2、实验者效应(1)定义:主试者在实验中可能以某种⽅式有意⽆意地影响被试者,使他们的反应符合实验者的期望(2)包括:①罗森塔尔效应②实验者的性别、种族、肤⾊等(3)实验者效应的消除:①双盲:实验者与被试都不知道实验处理类型和实验预期结果②实验的⾃动化:被试通过计算机或者其他设备做实验(⼆)被试的动机和态度对实验的影响1、要求特征(需要特征):(1)定义:被试会⾃发地对实验者的实验⽬的产⽣⼀个假设或猜想,然后再以⼀种⾃以为能满⾜这⼀假想的实验⽬的的⽅式进⾏反应(2)包括:①霍桑效应:因为被试知道⾃⼰处于实验中,是被观察者,所以他们会尽⼒去做,提⾼效率②安慰剂效应:指病⼈虽然获得⽆效的治疗,但却“预料”或“相信”治疗有效,⽽让病患症状得到舒缓的现象(3)要求特征的消除①单盲:被试不知道⾃⼰正在参与实验或不知道⾃⼰所处的实验处理组②掩饰情节:不告诉被试真正实验的假设(掩饰情节并不常⽤)⼆、变量(⼀)⾃变量1、⾃变量的分类:①刺激特点⾃变量②环境特点⾃变量③被试特点⾃变量④暂时造成的被试差别(由于不同的指导语/实验任务造成的差别)被试特点有⼀些可以操纵,有些则不能操纵2、操作定义(1)定义:⽤可以感知到的事件、现象或指标来对研究变量进⾏数量化或定性的界定和说明【例】挫折感抽象定义:当达到⽬标的过程中遇到障碍时所产⽣的情绪感觉或反应。
财务分析第四章 预测分析
财务分析第四章预测分析引言概述:财务分析是企业管理中的重要环节,能够帮助企业了解自身的财务状况并做出相应的决策。
预测分析作为财务分析的一个重要工具,可以帮助企业预测未来的财务状况,为企业的决策提供参考。
本文将从五个大点来阐述预测分析的重要性和方法。
正文内容:1. 预测方法的选择1.1 定量分析方法1.1.1 时间序列分析1.1.2 回归分析1.1.3 线性规划方法1.2 定性分析方法1.2.1 市场调研1.2.2 专家访谈1.2.3 Delphi法2. 预测分析的数据准备2.1 收集历史数据2.2 数据清洗和处理2.3 数据可视化和探索性分析3. 预测模型的建立3.1 建立数学模型3.1.1 时间序列模型3.1.2 回归模型3.1.3 神经网络模型3.2 模型选择和评估3.2.1 模型选择准则3.2.2 模型评估指标3.2.3 模型优化和改进4. 预测结果的解释和应用4.1 解释预测结果4.2 预测结果的可靠性评估4.3 预测结果的应用4.3.1 决策支持4.3.2 资金筹集4.3.3 经营规划5. 预测分析的局限性和风险5.1 数据的不确定性5.2 模型的局限性5.3 外部因素的干扰总结:预测分析在财务分析中起着重要的作用,通过选择适合的预测方法、准备好的数据、建立合适的预测模型,可以帮助企业预测未来的财务状况,为企业的决策提供参考。
然而,预测分析也存在一定的局限性和风险,需要注意数据的不确定性、模型的局限性以及外部因素的干扰。
因此,在进行预测分析时,企业需要综合考虑各种因素,做出准确可靠的预测,以支持企业的经营规划和决策。
(完整版)《市场调查与预测》练习题及答案B
《市场调查与预测》练习题及答案第一部分选择题一、单项选择题1.市场调查首先要解决的问题是( )a.确定调查方法b.选定调查对象c.明确调查目的d.解决调查费用2.实行消费者固定样本持续调查,要求在连续调查过程中( )a.样本固定不变,持续下去b.样本隔段时间变换一次,全部更换样本c.样本隔段时间变换一次,更换比较较小d.样本隔段时间变换一次,更换比较较大3.( )的市场信息具有较强的可传递性。
a.可识别b.有序化程度高c.目的性明确d.描述性4.在访问法中,哪种方法获得信息量最大( )a.面谈调查b.邮寄调查c.电话调查d.留置调查5.市场预测程序是( )a.明确目的、收集资料、分析、预测b.收集资料、明确目的、分析、预测c.分析、明确目的、收集资料、预测d.明确目的、收集资料、预测、分析6.判断分析法是从事物的( )a.量的方面进行预测b.质的方面进行预测c.量的方面分析判断,进行预测d.质的方面分析判断,进行预测7.时间序列数据会呈出现一种长期趋势,它的表现( )a.只能是上升趋势b.只能是下降趋势c.只能是水平趋势d.可以是上升、下降或水平趋势8.在一元性线回归方程 =a+bx中,( )表示当自变量每增减一个单位时,因变量的平均增减量。
a. b. ac. bd. x9.决策树分析法的决策准则是( )a.最大收益期望值标准b.最小损失期望值标准c.最优损益期望值标准d.最小风险标准10.从理论上讲,决策最终选择的理想方案,应该是追求方案( )a.最优化b.最满意化c.最科学化d.最合理化11.有目的的收集、整理和加工分析市场信息,使之集中化、有序化,成为可利用的信息,这一过程是()a. 市场调查b.市场分析c. 市场预测d.整理资料12.对于企业来讲,要消耗大量人力、物力和财力,不符合经济效益的要求的调查形式是()a. 几率抽样b.非几率抽样c. 典型调查d.市场普查13.下列有关信息,可通过实验调查法获得的是()A.国民收入的变动对消费的影响B.物价指数的变动对消费行为的影响C.股价对房价的影响D.改变包装对消费行为的影响14.在访问调查法中,获得的信息量最小的方法是()A.面谈调查B.邮寄调查C.电话调查D.留置调查15.“你穿什么牌号的旅游鞋为什么它的优点是什么”这种个人面谈方式称为()A.倾向偏差询问B.强制选择C.非强制选择D.自由回答16.预测对象自身在较长时间内所呈现的数量变化特征保持相对稳定,这要求我们在市场预测中遵循()A.类推原则B.连续原则C.相关原则D.概率性原则17.集合意见法适合于()A.短期市场预测B.近期市场预测C.近短期市场预测D.中长期市场预测18.时间序列综合预测模型中,其变动有正有负,正负可以抵销,故均值为零,其影响消失的变动是()A.随机变动B.循环变动C.季节性变动D.长期趋势19.在多元回归模型的检验中,目的是检验每一个自变量与因变量在指定显著性水平上是否存在线性相关关系的检验是()A.r检验B.t检验C.f检验D.DW检验20.经营决策应始终贯彻的基本指导思想是()A.效益原则B.科学原则C.民主化原则D.系统原则二、多项选择题(在每小题列出的五个选项中有二至四个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
生物实验题解题思路及步骤
生物实验题解题思路及步骤一、解题思路1. 先通读题目当拿到一道生物实验题的时候呢,首先要做的就是通读整个题目。
这一步可不能马虎呀!你得知道这个实验是关于什么的,是探究某种生物现象呢,还是验证某个生物学原理。
有时候题目可能会有点长,但一定要耐心读完。
我就经常告诉自己,这是解题的第一步,就像盖房子打地基一样重要呢!你是不是也有同感呢?2. 找出实验目的读完题目后,要努力找出实验目的。
这可是解题的关键所在哦!实验目的就像是灯塔,指引着你后面解题的方向。
比如说,是要观察某种生物的生长过程,还是要测试某种因素对生物的影响呢?这一步看起来很简单,但有时候题目会把目的隐藏得比较深,需要你仔细分析。
我通常会在这个环节花多一些时间,确保自己真的理解了实验目的。
3. 明确实验变量知道了实验目的之后,接着就要明确实验变量啦。
变量有自变量、因变量和无关变量。
自变量是我们人为改变的因素,因变量是随着自变量的改变而改变的因素,无关变量呢,就是那些我们要控制不变的因素。
这一点真的很重要,我通常会再检查一次,真的,确认无误是关键。
如果变量找错了,那后面的解题可就全错啦,这可就麻烦大了!二、解题步骤1. 分析实验材料和用具题目中一般会给出实验材料和用具。
这时候呢,你要思考这些材料和用具与实验目的、变量之间的关系。
比如说,如果是探究光照对植物生长的影响,给了植物幼苗、不同颜色的玻璃罩等材料,那你就要想到玻璃罩的颜色可能与光照这个自变量有关。
这一步其实还蛮简单的,但有时候我也会不小心漏掉哈哈。
不过没关系,如果后面发现有遗漏,再回来看看就好啦。
2. 设计实验步骤接下来就是设计实验步骤啦。
一般来说,要包括分组、设置对照、控制变量、进行实验操作等环节。
- 分组:要根据实验的要求合理分组。
比如可以分成实验组和对照组,每组的数量要合适,不能太少,不然结果可能不准确。
这一步你可以根据自己的经验稍作调整,不必完全照搬我的方法。
- 设置对照:对照组的设置非常重要哦!它是用来和实验组作对比的,这样才能看出自变量对因变量的影响。
预测分析方法
预测分析方法预测分析方法是指利用数据、模型和分析技术来预测未来事件或结果的方法。
在现代社会,预测分析方法被广泛应用于各个领域,如金融、市场营销、医疗保健、政府管理等。
它可以帮助人们做出更明智的决策,提高效率,降低风险,创造更大的价值。
在进行预测分析之前,首先需要收集和整理相关的数据。
这些数据可以是历史数据,也可以是实时数据。
历史数据可以用来建立模型,实时数据可以用来验证模型的准确性。
数据的质量对预测分析的结果有着至关重要的影响,因此在收集和整理数据的过程中,需要注意数据的完整性、准确性和一致性。
在选择预测分析方法时,需要根据具体的问题和数据特点来进行选择。
常见的预测分析方法包括时间序列分析、回归分析、机器学习、数据挖掘等。
不同的方法有着不同的适用范围和特点,需要根据具体情况来进行选择。
时间序列分析是一种常用的预测分析方法,它适用于分析一段时间内的数据变化规律。
通过对时间序列数据进行建模和预测,可以帮助人们预测未来的趋势和变化。
回归分析是一种统计方法,它可以用来分析自变量和因变量之间的关系,并进行预测。
机器学习和数据挖掘是一种基于数据的预测分析方法,它可以通过对大量数据的学习和挖掘,发现数据中的规律和模式,从而进行预测。
在进行预测分析时,需要注意模型的选择和建立。
一个好的模型应该能够准确地反映数据之间的关系,并且具有较高的预测准确性。
在建立模型的过程中,需要进行数据的预处理、特征选择、模型的训练和评估等步骤,以确保模型的有效性和可靠性。
除了选择合适的预测分析方法和建立有效的模型之外,还需要注意数据的可视化和解释。
通过数据的可视化,可以直观地展现数据的规律和趋势,帮助人们更好地理解数据。
同时,需要对预测结果进行解释和分析,以便人们能够理解预测结果的意义和影响。
总之,预测分析方法是一种重要的决策支持工具,它可以帮助人们更好地理解和利用数据,做出更明智的决策。
在应用预测分析方法时,需要注意数据的收集和整理、方法的选择和建模、数据的可视化和解释等方面,以确保预测分析的准确性和有效性。
《市场调查与预测》练习题及答案(自考)
《市场调查与预测》练习题及答案第一部分选择题一、单项选择题1.市场调查首先要解决的问题是( )a.确定调查方法b.选定调查对象c.明确调查目的d.解决调查费用2.实行消费者固定样本持续调查,要求在连续调查过程中( )a.样本固定不变,持续下去b.样本隔段时间变换一次,全部更换样本c.样本隔段时间变换一次,更换比较较小d.样本隔段时间变换一次,更换比较较大3.( )的市场信息具有较强的可传递性。
a.可识别b.有序化程度高c.目的性明确d.描述性4.在访问法中,哪种方法获得信息量最大( )a.面谈调查b.邮寄调查c.电话调查d.留置调查5.市场预测程序是( )a.明确目的、收集资料、分析、预测b.收集资料、明确目的、分析、预测c.分析、明确目的、收集资料、预测d.明确目的、收集资料、预测、分析6.判断分析法是从事物的( )a.量的方面进行预测b.质的方面进行预测c.量的方面分析判断,进行预测d.质的方面分析判断,进行预测7.时间序列数据会呈出现一种长期趋势,它的表现( )a.只能是上升趋势b.只能是下降趋势c.只能是水平趋势d.可以是上升、下降或水平趋势8.在一元性线回归方程 =a+bx中,( )表示当自变量每增减一个单位时,因变量的平均增减量。
a. b. ac. bd. x9.决策树分析法的决策准则是( )a.最大收益期望值标准b.最小损失期望值标准c.最优损益期望值标准d.最小风险标准10.从理论上讲,决策最终选择的理想方案,应该是追求方案( )a.最优化b.最满意化c.最科学化d.最合理化11.有目的的收集、整理和加工分析市场信息,使之集中化、有序化,成为可利用的信息,这一过程是()a. 市场调查b.市场分析c. 市场预测d.整理资料12.对于企业来讲,要消耗大量人力、物力和财力,不符合经济效益的要求的调查形式是()a. 几率抽样b.非几率抽样c. 典型调查d.市场普查13.下列有关信息,可通过实验调查法获得的是()A.国民收入的变动对消费的影响B.物价指数的变动对消费行为的影响C.股价对房价的影响D.改变包装对消费行为的影响14.在访问调查法中,获得的信息量最小的方法是()A.面谈调查B.邮寄调查C.电话调查D.留置调查15.“你穿什么牌号的旅游鞋为什么它的优点是什么”这种个人面谈方式称为()A.倾向偏差询问B.强制选择C.非强制选择D.自由回答16.预测对象自身在较长时间内所呈现的数量变化特征保持相对稳定,这要求我们在市场预测中遵循()A.类推原则B.连续原则C.相关原则D.概率性原则17.集合意见法适合于()A.短期市场预测B.近期市场预测C.近短期市场预测D.中长期市场预测18.时间序列综合预测模型中,其变动有正有负,正负可以抵销,故均值为零,其影响消失的变动是()A.随机变动B.循环变动C.季节性变动D.长期趋势19.在多元回归模型的检验中,目的是检验每一个自变量与因变量在指定显著性水平上是否存在线性相关关系的检验是()A.r检验B.t检验C.f检验D.DW检验20.经营决策应始终贯彻的基本指导思想是()A.效益原则B.科学原则C.民主化原则D.系统原则二、多项选择题(在每小题列出的五个选项中有二至四个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
实验三自上而下语法分析--预测分析
实验三预测分析法判断算术表达式的正确性学时数:6一、实验目的1、理解语法分析器的构造方法和工作原理;2、理解自上而下语法分析方法;3、熟练掌握预测分析程序的构造方法。
二、实验内容算术表达式的文法是G[E]:E→E+T| TT→T*F| FF→(E)| id用预测分析法按文法G[E]对算术表达式(包括+、*、()的算术表达式)进行语法分析,判断该表达式是否正确。
三、实验步骤1、准备:阅读课本有关章节,将上述算术表达式的文法改造成LL(1)文法;设计出预测分析表;按算法3.1(P56)编写程序。
2、上机调试,发现错误,分析错误,再修改完善。
四、测试要求1、为降低难度,表达式中不含变量(只含单个无符号整数或i);2、如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);3、测试用的表达式建议事先放在文本文件中,一行存放一个表达式,同时以分号结束。
同时将语法分析程序的输出结果写在另一个文本文件中;4、对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果。
5、程序输入/输出示例:如参考C语言的运算符。
输入如下表达式(以分号为结束)和输出结果:(a)1;输出:正确(b)1+2;输出:正确(c)(1+2)/3+4-(5+6/7);输出:正确(d)((1-2)/3+4输出:错误,缺少右括号(e)1+2-3+(*4/5)输出:错误五、实验报告要求1、写出修改后LL(1)文法,所构造的预测分析表。
2、通过对核心代码做注释或通过程序流程图的方式说明预测分析程序的实现思想。
3、写出调试程序出现的问题及解决的方法。
4、给出测试的结果。
六、思考(选作)文法G[E]所构造算术表达式只包含+和*。
请修改文法和程序,使得该语法程序可判断包含减号和除号的算术表达式的正确性。
[实验指导]将文法G[E]改造为LL(1)文法如下:G’[E]:E → TE’E’→ +TE’| εT → FT’T’→ *FT’|εF → (E)| i[补充说明]预测分析法分析程序可以从网上下载,但要求:(1)理解该程序,在实验报告中说明该程序所使用的文法和预测分析表;(2)实验报告要求同上。
预测分析法
一、实验名称预测分析法二、实验目的1.掌握自顶向下语法分析方法的原理;2.编程完成预测分析法。
三、实验内容和要求1.语法分析的方法——自顶向下语法分析方法的原理;2.确定的自顶向下的语法分析方法——预测分析法(LL(1)分析法)。
四、实验环境1. PC Windows2.VS2017五、算法设计思想1.将LL(1)分析表中的每个元素编号(包括第一行与列),用一个二维数组(char mid[M][M];)将其全部存入,二位数组的第一个下标就是LL(1)表中元素的下标;2.定义一个指针数组char *table[M][M] ; /*指向LL(1)分析表中的各个值用其指向LL(1)表中的元素,其中它的下标表示LL(1)表的行与列;3.分析过程:采用分治法的思想,对会出现的情况分别处理:(1)当分析栈顶为结束标记“#”时,判断剩余输入串是否也到结束标记,若是则成功,否则出错;(2)当分析栈顶为Vt 时,判断是否与剩余输入串首字符相同,同则退栈,不同则出错;(3)当分析栈顶为Vn 时,找到其与剩余输入串第一个Vt的下标,再通过指针数组找到产生式,将该产生式倒序输入栈(输入时会直接覆盖栈顶),1.若产生式为空(-),则出错,2.若为”$”则只需将栈顶指针下移一位。
六、主要问题与解决方法1.输出过程是无法将一列标齐:采用制表符’\t’即可;七、实验结果九、源代码#include<cstdio>#include<string>#include<string.h>#include<cstdlib>#include<iostream>#include<iomanip>using namespace std;#define N 20#define M 20 /* 允许输入的最大 Vn/Vt 个数*/char *table[M][M] ; /*指向LL(1)分析表中的各个值*/char mid[M][M]; /*LL(1)表中的各个值*/int input_table(int maxvn, int maxvt); /*输入LL(1)分析表*/int output_table(); /*输出LL(1)分析表*/int analyse(char Vn[], char Vt[], int maxvn, int maxvt);/*识别*/int main(){system("color B1");char Vn[M]="";char Vt[M]="";char ch;int i = 0, j = 0, k = 0,again=1; /*循环控制变量*/int maxvn, maxvt;printf("please input the Vn set (end up with '#' ):");ch = getchar();while (ch != '#') /*输入 Vn*/{Vn[i] = ch;ch = getchar();i++;}maxvn = i; /*确定非终结符个数*/printf("\n please input the Vt set (end up with '#' ):");i = 0;getchar();ch = getchar();while (ch != '#') /* 输入终结符集:*/{Vt[i] = ch;ch = getchar();i++;}maxvt = i+1; Vt[i] = '#'; /*增加一个结束标记*/printf("\n The LL(1) analyze table is ('_' means NULL) :\n\n");input_table(maxvn, maxvt); /*输入分析表*/printf("\nThis is the LL(1) analyze table ('_' means NULL) :\n\n");output_table(); /*输出分析表*/while (again == 1){analyse(Vn, Vt, maxvn, maxvt); /*分析,执行过程*/cout <<"\n\n DO you want to try again?(yes:enter 1 or no:enter 0)"<<endl;cin >> again;}cout <<"\n \n\nGood Bye!"<< endl;system("pause");}/**************************||/三个函数\||***********************************/int input_table(int maxvn,int maxvt) /*输入LL(1)分析表*/{int max_table;int i=0,j=0,k=0;max_table = (maxvn+1) * (maxvt+1);while (i < max_table){cin >> mid[i];i++;}i = 0;while (i<max_table){if ((i %(maxvt + 1)) == 0&& i!=0){j++,k=0;}table[j][k] = mid[i];i++; k++;}return 0;}int output_table() /*输出LL(1)分析表*/{cout << endl;int i = 0, j = 0;while (table[i][0] != NULL){if (table[i][j] == NULL){i++,j=0;cout << endl;}else{cout<<setw(10)<<table[i][j];j++;}}return 0;}int analyse(char Vn[],char Vt[],int maxvn,int maxvt){char pro[M] = "" ;/*此为一个栈,存放过程*/char str[M]=""; /*存放待识别的字符串*/int top=1;/*栈顶指针*/int i = 0, j = 0, order = 1;/*循环控制、计数变量*/int length = 0,list=0,line=0;pro[0] = '#', pro[1] = 'S';cout <<"\n Please input the words you want to identify:";cin >> str;cout <<"\n LL(1) 分析过程如下:";cout <<"\n步骤\t分析栈\t剩余输入串\t所用产生式 "<< endl;length=strlen(str);/*待识别字符串长度*/while (j < length){if (pro[top] == '#'){if (j != length - 1){printf("\n ERROR!!Cannot Identify!!!\n");goto end;}else{cout <<order++<<"\t#"<<"\t#"<<"\t\t<接受>"<<endl;printf("\n Congruatlate!!! You are successful !! The process is above .~\n ");goto end;}} /*判断是否成功接收*/i = 0;if (strchr(Vn, pro[top]) == NULL)/*判断栈顶元素是否 Vt*/ {if (pro[top] == str[j])/*匹配*/{cout << order++ <<'\t';while (i <= top){cout << pro[i];i++;} /*输出栈*/i = j;cout <<"\t";while (i < length){cout << str[i];i++;}/*输出剩余输入串*/cout <<"\t\t<匹配>"<<endl;top--;/*只有栈退,输入串不变*/j++;continue;}else{printf("\n ERROR!!Cannot Identify!!!\n");goto end;}}/* if (j != length - 1){printf("\n ERROR!!Cannot Identify!!!\n");goto end;}*/while (pro[top] != Vn[i]){if (i == maxvn - 1){printf("\n ERROR!!Cannot Identify!!!\n");goto end;}elsei++;}line = i + 1;/*找到table 的行*/i = 0;while (str[j] != Vt[i]){if (i == maxvt - 1){printf("\n ERROR!!Cannot Identify!!!\n");goto end;}elsei++;}list = i + 1;/*找到table 的列*//**************** 找到table 的行与列之后 ***** 输出这一过程*****************************/i = 0;cout << order++ <<"\t";while (i <= top){cout << pro[i];i++;} /*输出栈*/i = j;cout <<"\t";while (i < length){cout << str[i];i++;}/*输出剩余输入串*/cout<<"\t\t"<< pro[top]<<" --> "<< table[line][list]<<endl;/*输出所用产生式*//* ********************识别一项后的处理**** ****************/i = 0;if (strcmp(table[line][list], "$") == 0)/*产生式为空的时候*/{top--;}else{if (strcmp(table[line][list], "-") == 0)/*没有该产生式的时候*/{printf("\n ERROR!!Cannot Identify!!!\n");goto end;}else{while (*(table[line][list] + i) != NULL)/*找到产生式最后一位指针,再倒序输入栈*/{i++;}i--;while (i >= 0){pro[top] = *(table[line][list] + i);i--;top++;}top--;/*上面top多加了1*//*倒序输入栈*/}}}end:return 0;}。
《预测及决策技术应用》课程实验报告
实验报告实验名称:预测与决策技术应用课程实验指导教师:实验日期:实验地点:班级:学号:姓名:实验成绩:实验1 德尔菲预测法【实验题目】某公司为实现某个目标,初步选定了a,b,c,d,e,f 六个工程,由于实际情况的限制,需要从六项中选三项。
为慎重起见,公司共聘请了100位公司内外的专家,请他们选出他们认为最重要的三项工程,并对这三项工程进行排序,专家的意见统计结果如下表。
如果你是最后的决策者,请根据专家给出的意见,做出最合理的决定。
专家意见表排序 1 2 3 a 30 10 20 b 10 10 40 c 16 10 20 d 10 15 0 e 14 46 10 f 20 9 10【实验环境】• Excel【实验目的】• 掌握利用德尔菲法进行定性预测的方法 【实验步骤及结果】本实验中,要求选择3个项目进行排序,则可以按每位专家是同等的预测能力来看待,并规定其专家评选的排在第1位的项目给3分,第2位的项目给2分,第3位的项目给1分,没选上的其余项目给0分。
在本实验中,1T =3分,2T =2分,3T =1分。
上表中,对征询表作出回答的专家人数N=100人:赞成a 项排第1位的专家有30人(即a,1N =30),赞成a 项排第2位的专家有10人(a,2N =10),赞成a 排第3位的有20人(a,3N =20)。
所以,a 项目的总得分为:3*30+2*10+1*20=130分。
同理可以分别计算出:b 项目的总得分为:3*10+2*10+1*40=90分;c 项目的总得分为:3*16+2*10+1*20=88分;d 项目的总得分为:3*10+2*15+1*0=60分;e 项目的总得分为:3*14+2*46+1*10=144分;f 项目的总得分为:3*20+2*9+1*10=88分。
由此,绘制下表。
并从总分按高到低排序,得到前三个项目是e、a、b。
专家意见表排序第1位第2位第3位得分\分排序分值\分 3 2 1工程a 30 10 20 130 2b 10 10 40 90 3c 16 10 20 88 4d 10 15 0 60 6e 14 46 10 144 1f 20 9 10 88 4该方法用统计方法综合专家们的意见,定量表示预测结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预测分析方法一.实验要求确定的自顶向下分析方法,主要介绍了两种子法和预测分析方法。
本实验主要对自用预分析方法进行自顶向下分析的预测分析程序进行介绍:文法表达式:E—>E+T | TT—>T*F | FF—>i | (E)二.实验过程构造步骤(1)由于文法中含有左递归,所以必须先消除左递归,使文法变为:E—>TE´E´—>+TE´| εT—>FT´T´—>*FT´| εF—>i | (E)(2)构建以上文法的预测分析表如下:三.实验框图四.程序代码#include <stdio.h>#include <string.h>char stack[10];char *analist[5][6]={ {"Te","1","1","Te","1","1"}, {"1","+Te","1","1","0","0"}, {"Ft","1","1","Ft","1","1"}, {"1","0","*Ft","1","0","0"}, {"i","1","1","(E)","1","1"} };int top,Analysised;int CharToInt(char mark) {精品资料int outint;switch(mark){case 'i': outint=0; break;case '+': outint=1; break;case '*': outint=2; break;case '(': outint=3; break;case ')': outint=4; break;case '#': outint=5; break;case 'E': outint=0; break;case 'e': outint=1; break;case 'T': outint=2; break;case 't': outint=3; break;case 'F': outint=4; break;default: ;}return(outint);}char vn[]={'E','e','T','t','F'};char vt[]={'i','+','*','(',')','#'};int Compare(char str,int n){int i=0;int m=0;char at[7];if(n==1){m=strlen(vn);strcpy(at,vn);}else if(n!=1){m=strlen(vt);strcpy(at,vt);}for(i=0;i<m;i++)if(at[i]==str){return 1;}return 0;}int main(){int length,i;char analist1[10];char inStr[81];int len;int step=0;int j,k,x,y,temp;int t=0;top=0;Analysised=0;stack[top]='#';top++;stack[top]='E';printf("\t预测分析程序\n\n\n");printf("请输入你要分析的字符串:\n");gets(inStr);printf("\n");len=strlen(inStr);if(inStr[len-1]!='#'){printf("\n待分析的字符串中没有中止符号“#”\n\n");Analysised=len*2;t=0;}for(i=0;i<len;i++){if(!Compare(inStr[i],2)){if(inStr[len-1]!='#')printf("而且\n");elseprintf("待分析的字符串中含有终结符以外的字符\n\n");Analysised=len*2;break;}else t=1;}if(t==1)printf("步骤分析栈剩余输入串推导所用产生式或匹配\n\n");while(Analysised<len){x=CharToInt(stack[top]);y=CharToInt(inStr[Analysised]);if((Analysised==len-1)&&(top==0)){step++;printf("第%d步",step);for(j=0;j<=top;j++)printf("%c",stack[j]);printf(" ");for(temp=0;temp<=Analysised;temp++)printf(" ");for(k=Analysised;k<len;k++)printf("%c",inStr[k]);printf(" 接受\n");printf("\n您输入的%s 能够被接受!!",inStr);Analysised++;}elseif((stack[top]==inStr[Analysised])||(*analist[x][y]=='0')||(*analist[x][y]=='1 ')){if((stack[top]==inStr[Analysised])){step++;for(j=0;j<=top;j++)printf("%c",stack[j]);printf(" ");for(temp=0;temp<=Analysised;temp++)printf(" ");for(k=Analysised;k<len;k++)printf("%c",inStr[k]);printf(" “%c”匹配\n",inStr[Analysised]);top--;Analysised++;//读入下一个字符}else if(*analist[x][y]=='0'){step++;printf("第%d步",step);for(j=0;j<=top;j++)printf("%c",stack[j]);printf(" ");for(temp=0;temp<=Analysised;temp++)printf(" ");for(k=Analysised;k<len;k++)printf("%c",inStr[k]);printf(" %c-->%s\n",stack[top],analist[x][y]); top--;}else if(*analist[x][y]=='1'){printf("\n“%c”不匹配",inStr[(Analysised)]); printf("\n您输入的%s 不能被接受!!\n",inStr); Analysised=len*2;}else ;}else{strcpy(analist1,analist[x][y]);length=strlen(analist1);step++;for(j=0;j<=top;j++)printf("%c",stack[j]);printf(" ");for(temp=0;temp<=Analysised;temp++) printf(" ");for(k=Analysised;k<len;k++)printf("%c",inStr[k]);printf(" %c -->%s\n",stack[top],analist1); for(i=0;i<length;i++){stack[top]=analist1[length-1-i];top++;}top--;}}return 0;}五.实验结果1. 输入句子i+i*i#,其运行结果为:2.输入句子i+#,其运行结果为:3.输入句子(i),其运行结果为:五.实验总结分析代码我们可以看出只要能够正确的理解了算法义意,程序是不难实现的。
我认为这个算法中的难点就是如何把分析表用矩阵表示并且如何方便的取出其中的元素,还有就是对待检测的字符串的前期处理很重要,他可以使待处理的字符串是便于下面处理“干净的字符串”。
其余的就是对栈的处理只要把握住栈顶要始终指向要操作的数就可以了。
如果完全按照书中教材的框图一步一步走下来的话,会比较麻。
用到多层的if判断。
预测分析算法的优点在于实现方法简单、直观,便于手工构成或自动生成语法分析器。
如本实验中,根据消除左递归的文法手工生成预测分析表,从而实现本文法的预测分析。