




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上编译原理课程设计报告1、 分析通过设计,编制,调试一个语法及语义分析程序,加深对语法及语义分析原理的理解。IF 布尔表达式 THEN 赋值语句 ELSE 赋值语句 其中(1)、可以选择递归下降法、LL(1)、算符优先分析法、LR法完成以上任务,中间代码选用四元式。 (2)、 写出符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。(3)、 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。2、 算法设计 程序要求有三部分组成,即词法分析、语法分析、以及语义分析。其中词法分析部分要求完成对输入程序关键字、标识符、常数、运算符进行识别;并分析词法分
2、析的结果,检查程序输入的关键字是否为符合设计文法的关键字,检查标志符是否是合法标志符,识别运算符的种类。语法分析部分主要是以算符优先文法的设计思想和步骤完成对词法分析结果的的语法分析工作,判断输入的程序是否符合设计的IF-THEN-ELSE文法。在语法分析通过的基础上进行语义分析,其主要任务是完成对语法分析后的程序的语义分析,根据语法制导翻译去翻译输入的程序,从而得到程序的中间代码表示形式四元式。 词法分析、语法分析和语义分析的流程图如下:(1) 词法分析A 词法分析器的功能和输出形式输入:所给文法的源程序字符串输出:二元组(单词种别,单词符号的属性值)构成的序列B. 待分析的简单语言的词法因
3、为是模拟简单编译器, 所以就以C语言的小型子集作为模拟编译器的词法.模拟程序语言的单词符号可分为下列五种; 关键字: (相当于Pascal语言中的begin) , if ,else , while , (相当于Pascal语言中的end ) 所有的关键字都是小写字母 . 运算符: + , - , * , / , = , < , <= , = , > , >= ,<> , && ,| , ! 界 符: 逗号 ,分号 ,左圆括号 , 右圆括号 , # 常 数: 在这里只涉及到int型常量 其他单词是标识符(ID)和整形常数(NUM),通过以下正规
4、式定义: ID = letter(letter|digit)*NUM = digit digit *空格由空白,制表符和换行符组成,空格一般用来分隔ID,NUM,运算符,界符和关键字,词法分析阶段通常会被过滤掉。C.词法分析的设计思想:算法的基本任务是从字符串表示的源程序中识别出其具有独立意义的单词符号, 其基本思想是根据扫描到的单词符号的第一个字符的种类, 拼出相应的单词符号。(2)语法分析语法分析要处理的输入是词法分析的输出即单词序列。该部分主要用到两个栈,一个用来保存单词标志号的状态栈另一是用来保存单词本身信息的符号栈。程序从词法分析输出的单词序列中读取一个单词,检查单词是否是合法单词,
5、如果是合法的,则取符号栈的栈顶元素,和当前单词的标志号进行优先级比较,如果小于当前单词的优先级那么将当前单词压入符号栈,将其标志号压入状态栈;如果大于当前单词的优先级那么继续弹出状态栈的元素,和上一个符号栈弹出的元素进行比较,如果两优先级相等则继续弹,如果小于上一次弹出的元素的优先级,则弹的所有元素按先后弹的倒置顺序排列为一个句柄,查找产生式找到相应的产生式进行规约,把规约或的元素当多当前一的元素继续进行比较,直到词法分析输出结果全部遍历完。在规约的过程中记下规约的次数,和每次规约的元素,以便语义分析和中间代码生成。(3) 语义分析语义分析主要是将语义分析结果转化成三地址码表示的中间代码的过程
6、。在语法分析的过程中,在每次规约的过程中记录规约的类型和各个类型规约的次数。即当规约的语句是布尔表达式时每规约一次都将规约的语句转化成三地址码的形式保存在字符串E中并记录E中规约产生式的次数在m1.quad中;如果规约的产生式是第一个赋值语句块中的赋值语句,则将规约的产生式以三地址形式保存在字符串B1中并记录B1中规约产生式的次数在m2.quad中;如果规约的产生式是第二个赋值语句块中的赋值语句,则将规约的产生式以三地址形式保存在字符串B2中并记录B2中规约产生式的次数在 m3.quad中。最后控制将B1、B2和E中的内容输入。3、 LL(1)文法 LL(1)文法分析流程图: 构造不带回溯的自
7、上而下分析的文法条件1. 文法不含左递归,2. 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若Aa 1|a 2|a n 则 FIRST(a i)FIRST(a j)f (i¹j)3. 对文法中的每个非终结符A,若它存在某个候选首符集包含e,则FIRST(A)FOLLOW(A)=f如果一个文法G满足以上条件,则称该文法G为LL(1)文法。构造预测分析表的步骤:对每个产生式Aa1|an执行,。对FIRST(A)中每个终结符a, 把Aai加入到MA,a, 其中a FIRST(ai)若FIRST(ai), 则对任何属于FOLLOW(A)的终结符b,将A ai加入MA,b
8、。把所有无定义的MA,a标记为出错。在上面的属性文法中我们使用了这样的假定:每当需要临时变量时,newtemp产生新的临时名字; lookup()用于根据名字的拼写检查符号表中是否存在该名字的条目。如果有,返回该条目的指针,否则lookup返回nil,以表示没有找到;E的属性place用来存放E值的变量名在符号表的登录项或一整数码(若此变量是一个临时变量);函数newtemp用来产生一个新的临时变量的名字,把该名字也存入符号表,并返回该条目的地址。过程emit将其参数写到输出文件上。emit的参数构成一个三地址语句;变量nextstat给出在输出序列中下一个三地址语句的序号,em
9、it在产生每个三地址语句后将nextstat加1。我们给relop以属性op,用来确定该关系算符究竟代表哪个关系运算。E.true,E.falsen和S.next都是三地址语句的标号,它们都是继承属性.。E.true和E.false分别表示E为真和为假时控制流应该转向的标号,这两个属性由E的上下文决定;S.next表示执行完S后应该执行的第一个三地址语句的标号,它也是由S的上下文决定语法分析方法描述开始时,将"#"和文法开始符号放入栈底。总控程序在任何时候都是根据栈顶符号X和当前的输入符号进行工作的,它与文法无关 总控程序根据现行栈顶符号X和当前输入符号a,执行下列三种动作
10、之一:1. 若Xa,则宣布分析成功,停止分析。2. 若Xa ,则把X从STACK栈顶逐出,让指针指向下一个输入符号。3.若X是一个非终结符,则查看分析表M。 若MX,a中存放着关于X的一个产生式,把X逐出STACK栈顶,把产生式的右部符号串按反序一一推进STACK栈(若右部符号为,则意味不推什么东西进栈)。在把产生式的右部符号推进栈的同时应做这个产生式相应的语义动作。若MX,a中存放着“出错标志”,则调用出错诊察程序ERROR。四、详细设计4.1 语法规则定义的文法,如下: (0) Z-àS(1) S-àAB(2) A->CDE(3) C-àvoid(4)
11、D-àmain(5) E-à()(6) B-àF(7) F-àGF(8) F-àG(9) G->HIJ(10) H-àint(11) I-àKLM(12) K-àcharacter(13) L-à=(14) M->num(15) J-à4.2程序流程图语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查 语法错误,报告错误的性质和位置,并进行适当的纠错工作.法分析的方法有多种多样,常用的方法有递归子程序方法、运算符优先数法、状态矩阵法、LL(K)方法和LR(K)方法。归纳起来
12、,大体上可分为两大类,即自顶向下分析方法和自底向上分析方法. Syntax进行语法分析.对于语法分析,这里采用LR(1)分析法,判断程序是否满足规定的结构.构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。4.3基本树形结构:if语句: if语句表达式语句语句while语句:while语句表达式语句表达式语句表达式for语句表达式for循环语句:复合语句:语句复合语句语句语句声明五、 实验结果要编译的文件:词法分析:输出的四元式:六、 心得体会这段时间的课程设计让我知道计算机将高级语言翻译成
13、机器语言的过程,并且体会到了中间的设计分析处理过程,再一次熟悉了C语言的编写。也学到了许多课本上没写的东西,在实验的编写中有许多的坎坷,但是在大家集体和老师的帮助下,都慢慢的克服,也没有什么困难是不可克服的!经过这个实验,也深入体会到计算机的内部世界,进一步的摸清楚计算机的构架。为以后的学习工作再一次奠定了基础,受益匪浅!七、 源代码#include<iostream.h>#include<fstream.h>#include<string.h>#include<iomanip.h>#include<malloc.h>enum key
14、word $right_paren,$left_paren,$mul,$div,$add,$sub,$fenhao, $equal,$IF,$THEN,$ELSE,$greater,$less,$id,$num,$end;/关键字的枚举typedef struct Tokenkeyword type;char ch;Token;/定义的token结构typedef enumJUMP,JG,JL,equal,END,add,mul,sub,divOpKind;/操作符定义为opkindtypedef structint label;/标号OpKind op;/操作符char par1,par2;
15、/操作数unionchar result;/结果int address;/地址;Quad; /四元式入口#define MAX_TOKEN 256/Token表大小#define MAX_QUAD 256/四元式数组大小Token tokentableMAX_TOKEN;Quad quadMAX_QUAD;int token_index;/token表索引int total_len;/token表有效长度int quad_len;/四元式表有效长度int quad_index;/四元式索引Token cur;Token queue10;int label,k,one; /标记接口char cu
16、rchar;/存储当前待比较字符char curtocmp;/存储当前栈顶字符ifstream ins;int trueadd,falseadd,end; int table58=1,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,1,0,0; /存储预测分析表,1为有产生式,0为没有int i,j;int flag;struct Lcharchar char_ch;struct Lchar *next;Lchar,*temp,*top,*base;int right;/定义开关项bool init
17、ialize(char filename255);/文件打开初始化bool accidence();/词法分析void print();/输出单词表void backpath(int,int);/回填出口void ERROR();void sentence();/分析语句void boolean();/ 分析E->id < id | id > id语句bool nexttoken();/读下一单词char newchar();void push();/进队列char dosome(void);/算法函数void pushs(char pchar);/入栈函数void pop(
18、void);/出栈函数void doforpush(int t);/根据数组下标计算的值产生式入栈void changchartoint();/根据curchar,curtocmp转为数字以判断是否有产生式void semantic();/语法语义分析char LL1();/LL(1)文法分析void printQuad();/输出四元式void ERROR(char str20);void AD_ADDRESS(int nlabel,OpKind nop,char npar1,char npar2,int naddress);void AD_RESULT(int nlabel,OpKind
19、nop,char npar1,char npar2, char nresult);void main() cout<<" "<<endl <<" 基于LL(1)法的条件语句语法语义分析程序 "<<endl <<" "<<endl;cout<<"输入您要编译编译文件的文件名(文件名.txt):"char fname100;cin>>fname;if(!initialize(fname)/初始化文件return;if(!ac
20、cidence()/词法分析return;char ch;while(1)if(ins.eof()/ifstream ins;文件输入串,若文件已完。则break break;ins>>ch;/继续读入文件内容cout<<endl<<"词法分析结果如下:"print();/打印词法分析的结果cout<<endl;cout<<"词法分析结束。"<<endl<<endl;semantic(); /语法语义分析cout<<endl<<"输出四元
21、式:"<<endl;printQuad();/输出四元式if(right=1)cout<<"分析成功"<<endl;elsecout<<"分析失败"<<endl;cout<<"语法语义分析结束"<<endl;char newchar() char p; p=char(k); /int label,k,one; /标记接口k+;return p; /文件打开初始化bool initialize(char filename100) one=0;t
22、oken_index=0;/token表索引total_len=0;/token表有效长度quad_len=0;/四元表有效长度quad_index=0;/四元表索引label=0; /int label,k,one; /标记接口end=0;/ 前面定义的全局变量int trueadd,falseadd,end; k=48;ins.open(filename,ios:nocreate | ios:in);if(ins.fail()cout<<"文件打开出错!"<<endl;return false;return true;/词法分析bool acci
23、dence()int k=0;char buf16;/暂存数组单元char ch;while(1)ins>>ch;if(ins.fail()break;while(ch=' ')ins>>ch;if(ch='I')ins>>buf; /对关键字分析if(strcmp(buf,"F")=0)tokentabletotal_len+.type=$IF;else if(ch='T')ins>>buf;if(strcmp(buf,"HEN")=0)tokentable
24、total_len+.type=$THEN;else if(ch='E')ins>>buf;if(strcmp(buf,"LSE")=0)tokentabletotal_len+.type=$ELSE; /对关系运算符分析else if(ch='>')tokentabletotal_len+.type=$greater;else if(ch='<')tokentabletotal_len+.type=$less;else if(ch='=')tokentabletotal_len+.ty
25、pe=$equal; /对字母的分析else if(ch>='A'&& ch<='Z' )| (ch>='a' && ch<='z')tokentabletotal_len.type=$id;tokentabletotal_len+.ch=ch;/对数字的分析else if(ch>='0' && ch<='9')tokentabletotal_len.type=$num; tokentabletotal_len+.c
26、h =ch;Else /采用switch语句对运算符,括号分析switch (ch)case '+' :tokentabletotal_len.type=$add; tokentabletotal_len+.ch =ch; break; case '-' :tokentabletotal_len.type=$sub; tokentabletotal_len+.ch =ch; break; case '/' : tokentabletotal_len.type=$div; tokentabletotal_len+.ch =ch; break; ca
27、se '*' :tokentabletotal_len.type=$mul; tokentabletotal_len+.ch =ch;break; case '' :tokentabletotal_len.type=$fenhao; tokentabletotal_len+.ch =ch;break;case '(' :tokentabletotal_len.type=$left_paren; tokentabletotal_len+.ch =ch; break;case ')' :tokentabletotal_len.type
28、=$right_paren; tokentabletotal_len+.ch =ch;break; default:cout<<"!"<<endl; return true;/词法分析结束/语法语义分析void semantic() if(!nexttoken()ERROR("s(0)"); cout<<"开始进行语法语义分析:"<<endl <<"所使用的产生式:"<<endl <<"<if语句> ->
29、 if E then S else S"<<endl <<"S->if E then p1 else P2"<<endl <<"E->a>b"<<endl <<"P1->x:=a*c"<<endl <<"P2->x:=b*c"<<endl <<"语法语义分析过程如下:"<<endl; if(cur.type=$IF) bool
30、ean();/分析布尔语句 if(!nexttoken()ERROR("S(0)");if(cur.type=$THEN) backpath(trueadd,quad_len);/回填出口sentence();/分析语句end=quad_len; AD_ADDRESS(quad_len,JUMP,'-','-',end); /产生跳转地址的四元式 if(cur.type=$ELSE)backpath(falseadd,quad_len); sentence(); backpath(end,quad_len); elseERROR("
31、S(else)");elseERROR("S(then)"); elseERROR("S(if)");AD_RESULT(quad_len,END,0,0,'-'); /产生数值语句的四元式/读下一单词bool nexttoken()if(token_index>=total_len)return false;if(tokentabletoken_index.type=$fenhao)token_index+;cur.type=tokentabletoken_index.type;cur.ch=tokentabletoke
32、n_index.ch;token_index+;return true;/进队列void push() one=0; while(tokentabletoken_index.type!=$fenhao) queueone.type=tokentabletoken_index.type;queueone.ch=tokentabletoken_index.ch;cout<<queueone.ch;token_index+;one+; queueone.type=$end; queueone.ch='#'cout<<queueone.ch;/队列下一个字符vo
33、id next() cur.type=queueone.type; cur.ch =queueone.ch ; one+;/ 分析E->id < id | id > id语句void boolean() char a,b;int c; if(!nexttoken()ERROR("E(0)");if(cur.type=$id|cur.type=$num)a=cur.ch;if(!nexttoken()ERROR("E(0)"); if(cur.type=$greater|cur.type=$less) c=cur.type ;if(!ne
34、xttoken() ERROR("E(0)");if(cur.type=$id|cur.type=$num) b=cur.ch;else ERROR("E(id/num)"); if(c=$greater) trueadd=quad_len-1; falseadd=quad_len; AD_ADDRESS(quad_len,JG,a,b,trueadd); AD_ADDRESS(quad_len,JUMP,0,0,falseadd); else trueadd=quad_len; falseadd=quad_len+1; AD_ADDRESS(quad_
35、len,JL,a,b,trueadd); AD_ADDRESS(quad_len,JUMP,0,0,falseadd); else ERROR("E(id/num)");elseERROR("E(greater/less)");/分析语句void sentence() char rtn; char c;if(!nexttoken() ERROR("S(0)");if(cur.type=$id) c=cur.ch;if(!nexttoken() ERROR("S(0)");if(cur.type!=$equal)ER
36、ROR("S(equal)");push();one=0;rtn=LL1(); AD_RESULT(quad_len,equal,rtn,'-',c);nexttoken();while(cur.type=$id)c=cur.ch;if(!nexttoken() ERROR("S(0)");if(cur.type!=$equal)ERROR("S(equal)");push();one=0;rtn=LL1(); AD_RESULT(quad_len,equal,rtn,'-',c);nexttoken(
37、);/LL(1)文法分析char LL1() right=1;/开关项为1flag=0;char t;base=(struct Lchar *)malloc(sizeof(Lchar);/初始化堆栈base->next=NULL;base->char_ch='#'temp=(struct Lchar *)malloc(sizeof(Lchar);temp->next=base;temp->char_ch='E'top=temp;/初始化堆栈 t=dosome();/开始识别if(right)/如果开关项为1cout<<&quo
38、t;OK!"<<endl<<endl;elsecout<<"Error!"<<endl; return t;/入栈函数void pushs(char pchar) temp=(struct Lchar *)malloc(sizeof(Lchar);temp->char_ch=pchar;temp->next=top;top=temp;/出栈函数void pop(void) curtocmp=top->char_ch;if(top->char_ch!='#')top=top-&g
39、t;next; /根据数组下标计算的值产生式入栈void doforpush(int t) switch(t)case 0:pushs('A');pushs('T');break;case 5:pushs('A');pushs('T');break;case 11:pushs('A');pushs('T');pushs('+');break;case 12:pushs('A');pushs('T');pushs('-');break;c
40、ase 20:pushs('B');pushs('F');break;case 25:pushs('B');pushs('F');break;case 33:pushs('B');pushs('F');pushs('*');break;case 34:pushs('B');pushs('F');pushs('/');break;case 40:pushs('i');break;case 45:pushs(')
41、39;);pushs('E');pushs('(');/根据curchar,curtocmp转为数字以判断是否有产生式void changchartoint() switch(curtocmp)case 'A':i=1;break;case 'B':i=3;break;case 'E':i=0;break;case 'T':i=2;break;case 'F':i=4;switch(curchar)case 'i':j=0;break;case '+'
42、:j=1;break;case '-':j=2;break;case '*':j=3;break;case '/':j=4;break;case '(':j=5;break;case ')':j=6;break;case '#':j=7;/算法函数char dosome(void) int t,a=0;char bian1,bian2; OpKind opa;char c='$'next();for(;)pop();if(cur.type!=$id && cur.ty
43、pe!=$num)curchar=cur.ch;elsecurchar='i'cout<<endl;cout<<curchar<<" "<<curtocmp<<endl;if(curtocmp='#' && curchar='#')break;if(curtocmp='A' | curtocmp='B' | curtocmp='E' | curtocmp='T' | curtocmp=
44、39;F')/当前字符为非终结符 if(curtocmp!='#')/当前比较字符不为'#'changchartoint();if(j=0) a+;flag+; if(flag=1) if(c='$') bian1=cur.ch; elsebian1=c; else if(flag=3) bian2=cur.ch; flag=1; c=newchar(); AD_RESULT(quad_len,opa,bian1,bian2,c);/产生四元式else switch(j) case 1:opa=add;flag+;break; case
45、2:opa=sub;flag+;break; case 3:opa=mul;flag+;break; case 4:opa=div;flag+;if(tableij) /有产生式t=10*i+j; /计算产生式在数组中的位置doforpush(t);continue;else /没有产生式right=0; /出错break;else /当前比较字符为'#'if(curtocmp!=curchar)right=0;/出错break;elsebreak; /正确else /当前字符为终结符if(curtocmp!=curchar)right=0; /出错break;elsenext
46、(); /读取下一个字符continue;if(a>1) return c;elsereturn bian1;/产生数值语句的四元式void AD_RESULT(int nlabel,OpKind nop,char npar1,char npar2, char nresult)quadquad_len.label=nlabel; quadquad_len.op=nop; quadquad_len.par1=npar1; quadquad_len.par2=npar2; quadquad_len.result=nresult; quad_len+; /产生跳转地址的四元式void AD_A
47、DDRESS(int nlabel,OpKind nop,char npar1,char npar2,int naddress) quadquad_len.label=nlabel; quadquad_len.op=nop;quadquad_len.par1=npar1;quadquad_len.par2=npar2; quadquad_len.address=naddress;quad_len+; /回填出口void backpath(int nlabel,int addr)quadnlabel.address=addr;/错误处理void ERROR(char str20) label+;
48、cout<<endl;cout<<"error! "<<str<<endl;/词法分析。输出单词表tokenvoid print() for(token_index=0;token_index<total_len;token_index+) if(token_index%100=0) cout<<endl;if(tokentabletoken_index.type=$IF)cout<<setw(2)<<"IF (0),"if(tokentabletoken_inde
49、x.type=$ELSE)cout<<setw(2)<<" ELSE (1),"if(tokentabletoken_index.type=$THEN)cout<<setw(2)<<" THEN (-),"if(tokentabletoken_index.type=$id) /字母cout<<setw(2)<<""<<tokentabletoken_index.ch<<" (25)"<<",&quo
50、t;if(tokentabletoken_index.type=$num) /数字cout<<setw(2)<<""<<tokentabletoken_index.ch<<" (26)"<<","if(tokentabletoken_index.type=$equal)cout<<setw(2)<<""<<'='<<" (18)"<<","i
51、f(tokentabletoken_index.type=$greater)cout<<setw(1)<<""<<'>'<<" (22)"<<","if(tokentabletoken_index.type=$less)cout<<setw(2)<<""<<'<'<<" (22)"<<"," if(tokentab
52、letoken_index.type=$add)cout<<setw(2)<<""<<'+'<<" (14)"<<","if(tokentabletoken_index.type=$sub)cout<<setw(2)<<""<<'-'<<" (15)"<<","if(tokentabletoken_index.type=$mu
53、l)cout<<setw(2)<<""<<'*'<<" (16)"<<","if(tokentabletoken_index.type=$div)cout<<setw(2)<<""<<'/'<<" (17)"<<","if(tokentabletoken_index.type=$fenhao)cout<<setw(
54、2)<<""<<''<<" (6)"<<","if(tokentabletoken_index.type=$left_paren)cout<<setw(2)<<""<<'('<<" (23)"<<","if(tokentabletoken_index.type=$right_paren)cout<<setw(2)<<
55、;""<<')'<<" (24)"<<","token_index=0;/输出四元式void printQuad()for(int i=0;i<quad_len;i+)if(quadi.label>-1)cout<<"("<<quadi.label<<")"<<": "else cout<<endl;if(quadi.op=JG)cout<<
56、"("<<"j>,"<<quadi.par1<<","<<quadi.par2<<","<<quadi.address<<")"<<endl;else if(quadi.op=JL)cout<<"("<<"j<,"<<quadi.par1<<","<<quadi.par2
57、<<","<<quadi.address<<")"<<endl;else if(quadi.op=JUMP)cout<<"("<<"j ,"<<"-,-,"<<quadi.address<<")"<<endl;else if(quadi.op=equal) if(quadi-1.result=quadi.par1)cout<<"(&qu
58、ot;<<":= ,"<<"T"<<quadi.par1<<",-,"<<quadi.result<<")"<<endl;else cout<<"("<<":= ,"<<quadi.par1<<",-,"<<quadi.result<<")"<<endl;else if(quadi.op=END)cout<<"("<<"-,-,-,-"<<")"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语三年级上册人教版三年级英语上册recycle1第二课时模板-英语
- 钢铁物流货运车辆挂靠承运合作协议
- 生物制药研发项目知识产权质押融资合同
- 数据中心机房基础设施改造与智能化升级合同
- 矿山设备工业设计专利许可与技术输出合同
- 网红饮品品牌授权与品牌推广合作合同
- 健身俱乐部私教课程全年销售与服务合同
- 繁华街区广告位租赁及品牌合作宣传协议
- 旅游度假区租赁合同(休闲娱乐)
- 新能源汽车电池租赁业务保险理赔操作规范合同
- GB/T 37356-2019色漆和清漆涂层目视评定的光照条件和方法
- GB/T 262-2010石油产品和烃类溶剂苯胺点和混合苯胺点测定法
- GB/T 22720.1-2017旋转电机电压型变频器供电的旋转电机无局部放电(Ⅰ型)电气绝缘结构的鉴别和质量控制试验
- 机柜间主体施工方案
- 福格行为模型
- 银级考试题目p43测试题
- 有限空间作业及应急物资清单
- 思想道德与法治教案第一章:领悟人生真谛把握人生方向
- 0-6岁儿童随访表
- 江西新定额2017土建定额说明及解释
- 国家电网有限公司十八项电网重大反事故措施(修订版)-2018版(word文档良心出品)
评论
0/150
提交评论