《编译原理》实验指导书——2012

《编译原理》实验指导书——2012
《编译原理》实验指导书——2012

《编译原理》实验指导书

太原科技大学计算机学院

2006-3-1

《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计和算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和掌握编译原理和技术的基本概念、基本原理和实现方法,实践环节非常重要,只有通过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。

为了配合《编译原理》课程的教学,考虑到本课程的内容和特点,本指导书设置了七个综合性实验,分别侧重于词法分析、NFA的确定化、非递归预测分析、算符优先分析器的构造、LR分析、语义分析和中间代码的生成、基于DAG 的基本块优化,以支持编译程序的各个阶段,基本涵盖了《编译原理》课程的主要内容。

本指导书可作为《编译原理》课程的实验或课程设计内容,在课程教学的同时,安排学生进行相关的实验。实验平台可选择在MS-DOS或Windows操作系统环境,使用C/C++的任何版本作为开发工具。学生在做完试验后,应认真撰写实验报告,内容应包括实验名称、实验目的、实验要求、实验内容、测试或运行结果等。

目录

实验一词法分析 ........................................................................................................... 1实验二NFA的确定化.................................................................................................... 3实验三非递归预测分析................................................................................................. 6实验四算符优先分析器的构造.................................................................................. 10实验五LR分析 .......................................................................................................... 12实验六语义分析和中间代码生成................................................................................ 17实验七基于DAG的基本块优化 ................................................................................. 19

实验一词法分析

1.实验目的与任务

对C语言的一个子集设计并实现一个简单的词法分析器,掌握利用状态转换图设计词法分析器的基本方法。

2.实验要求

利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词符号二元式的代码,并保存到文件中。

3.实验内容

(1) 假设该语言中的单词符号及种别编码如下表所示。

单词符号及种别编码

(2) 关键字main int char if else for while都是小写并都是保留字。

算符和界符:= + -* / & <<=>>===!=&& || , : ; { } [ ] ( ) ID和NUM的正规定义式为:

ID→letter(letter | didit)*

NUM→digit digit*

letter→a | …| z | A | …| Z

digit→0 | …| 9

如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一个空格作间隔。空格由空白、制表符和换行符组成。

(3) 设计词法分析器的步骤:

①首先根据上面单词符号表及ID和NUM的正规定义式,构造出状态转换图;

②定义相关的变量和数据结构。关键字作为特殊标识符处理,把它们预先安排在

一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能

查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字

符串数组,其描述如下:

char *KEY_WORDS[8]={″main″,″int″,″char″,″if″,″else″,″for″,″while″};

用以存放单词符号二元式的数据结构可如下定义:

#define MAXLENGTH 255 /* 一行允许的字符个数 */

union WORDCONTENT { /* 存放单词符号的内容 */

char T1[MAXLENGTH]; /* 存放标识符 */

int T2; /* 存放整型常数的拼数 */

char T3; /* 存放其他符号 */

};

typedef struct WORD { /* 单词符号二元式 */

int code; /* 存放种别编码 */

union WORDCONTENT value;

} WORD;

③按照编译程序一遍扫描的要求,把词法分析器Scaner作为一个独立的子程序来

设计,通过对Scaner的反复调用识别出所有的单词符号;

④当Scaner识别出一个单词符号时,则将该单词符号的二元式写入到输出文件中。

若Scaner无法识别出一个单词符号时,则调用错误处理程序PrintError,显示

当前扫描到的字符及其所在行、列位置,并跳过该字符重新开始识别单词符号。

(4) 测试该设计词法分析器,可对下面的源程序进行词法分析:

main()

{

int i = 10;

while(i) i = i - 1;

}

输出如下二元式代码序列:

(1,main) (26,() (27,)) (30,{) (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,( ) (10,i) (27,)) (10,i) (21, =) (10,i) (23,-) (20,1) (34,;) (31,})

实验二NFA的确定化

1.实验目的与任务

设计并实现将NFA确定化为DFA的子集构造算法,从而更好地理解有限自动机之间的等价性,掌握词法分析器自动产生器的构造技术。该算法也是构造LR分析器的基础。

2.实验要求

设计并实现计算状态集合I的ε闭包的算法ε_Closure(I)和转换函数Move(I,a),并在此基础上实现子集构造算法Subset_Construction。利用该从NFA到DFA的转换程序Subset_Construction,任意输入一个NFA N=(S,Σ,δ,s0,F),输出一个接收同一语言的DFA M=(S’,Σ,δ’,s0’,F’)。

3.实验内容

(1)令I是NFA N的状态集S的一个子集,I的ε闭包的ε_Closure(I)构造规则如下:

(a)若s∈I,则s∈ε_Closure(I);

(b)若s∈I,则ε_Closure({s})∈ε_Closure(I)

根据上面的规则,下面给出了一个计算I的ε闭包的算法ε_Closure(I)。

SET S;

SETε_Closure(input)

SET *input;

{

S=input; /* 初始化 */

push(); /* 把输入状态集中的全部状态压入栈中 */

while(栈非空){

Nfa_state i;

pop(); /* 把栈顶元素弹出并送入i */

if(存在δ(i, ε)=j)

if(j不在S中) {

把i加到S中;

把j压入栈中;

}

}

return S; /* 返回ε_Closure(input)集合 */

}

完成上述算法的设计。

(2)令I是NFA N的状态集S的一个子集,a∈Σ, 转换函数Move(I,a)定义为:

Move(I,a)= ε_Closure(J)

其中,J={s’|s∈I且δ(s,a)=s’}

转换函数Move(I,a)的设计通过调用ε_Closure(input)实现,完成该函数的设

计。

(3)从NFA N构造一个与其等价的DFA M的子集构造算法,就是要为DFA M构造状态转换表Trans,表中的每个状态是NFA N状态的集合,DFA M将“并行”地模拟NFA N面对输入符号串所有可能的移动。下面给出了子集构造算法Subset_Construction的框架,请完成其设计过程。

有关数据结构:

States[]:是一个M的数组,每个状态有两个域,set域存放N的状态集合,flg域为一标识。

Trans[]:是M的转移矩阵(输入字母表Σ元素个数×最大状态数),Trans[i][a]=下一状态。

I:M的当前状态号

a:输入符号,a∈Σ

Nstates[]:M的下一新状态号

S:定义M的一个状态的N的状态集

初始化:

tates[0].set=ε_Closure({N的初态})

States[0].flg=FALSE

Nstates=1

i=0

S=Ф

Trans初始化为无状态’-’

while(States[i]的flg为FALSE){

States[i].flg=TRUE;

for(每个输入符号a∈Σ){

S=ε_Closure(Move(States[i].set,a));

if(S非空)

if(States中没有set域等于 S的状态){

States[Nstates].set=S;

States[Nstates].flg=FALSE;

Trans[i][a]= Nstates++;

}

else Trans[i][a]= States中一个set域为S的下标;

}

}

此算法的输出M主要由Trans矩阵描述,其中省略了每个状态是否为终态的描述,应加以完善。

(4)测试用例

对下图所示的NFA N用子集构造算法Subset_Construction确定化。

NFA N的初态为12,DFA M的初态为ε_Closure({12})。整个转换过程可用下表来概括。

DFA M

实验三非递归预测分析

1.实验目的与任务

设计一个非递归预测分析器,实现对表达式语言的分析,理解自上而下语法分析方法的基本思想,掌握设计非递归预测分析器的基本方法。

2.实验要求

建立文法及其LL(1)分析表表示的数据结构,设计并实现相应的预测分析器,对源程序经词法分析后生成的二元式代码流进行预测分析,如果输入串是文法定义的句子则输出“是”,否则输出“否”。

3.实验内容

(1)文法描述及其LL(1)分析表

表达式语言(XL)的语法规则如下:

1.程序→表达式;

2. |表达式;程序

3.表达式→表达式 + 项

4. |项

5.项→项 * 因式

6. |因式

7.因式→ num_or_id

8. |(表达式)

将该语言的文法转换为如下的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 → num

6expr’→ +term expr’ 13 system_goal → prgm

7expr’→ε

该LL(1)文法的LL(1)分析表如下:

对文法中每个文法符号指定一个常数值,符号编码表如下:

(2)文法及其LL(1)分析表的数据结构

文法的产生式可用数组Yy_pushtab[]存放。数组的第一个下标是产生式号,第一个产生式的序号为0;每列按逆序存放该产生式右部各符号的常数值,并以0结束。对于该表达式语言XL的LL(1)分析表,可用数组Yy_d[]存放。第一个下标是非终结符数值,第二个下标是终结符数值,数组元素的值为:0(表示接受),1(表示产生式号),-1(表示语法错)。

数组Yy_d[]的具体内容及表示如下:

0 1 2 3 4 5 6

# ; + * () Num

prgm’ 257

expr 258

expr’ 260

factor 261

term’ 262

system_goal 263

数组Yy_pushtab[]的具体内容及表示如下:

(3)预测分析器总控程序结构

预测分析器总控程序使用上面的两个表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]中列出的全部常数压入分析栈;

}

}

}

请实现该程序。在程序中添加输出栈内容的功能,以便和手工模拟分析过程作比较。

(4)用预测分析器和手工模拟两种方式对文法的句子1+2;进行分析。综合分析过程可用下表表示。

实验四算符优先分析器的构造

1. 实验目的与任务

(1)理解自底向上的语法分析的基本思想。

(2)理解算符优先文法的概念。

(3)掌握算符分析表和优先函数的构造。

(4)掌握算符优先分析器的工作原理和工作流程。

2. 实验原理

算符优先分析法是一种简单、直观、广为使用的语法分析方法,这种方法特别适用于程序设计语言中的表达式的分析。算符优先分析法就是仿照算术表达式的运算过程而提出的一种自底向上的语法分析方法,它可以分析算符优先文法,分析的基本思想是:根据文法终结符之间的优先关系,通过比较相邻算符的优先次序来确定句型中的最左素短语,并进行归约。

所谓的算符优先文法是指:对算符文法中任意两个终结符对a、b之间至多有一种优先关系成立的文法,而算符文法G中的任何一个产生式中都不包含两个非终结符相邻的情况。对于满足这样条件的文法,我们就可以用算符优先分析法对其进行分析。

确定了符合要求的文法之后,自底向上的分析方法的关键就是如何在当前句型中寻找可归约的子串,算符优先分析法在归约过程中,通过终结符之间的优先关系确定当前的句型中的最左素短语,与非终结符无关,只需知道把当前句型中的最左素短语归约为一非终结符,不必知道该非终结符的名字是什么,这样也就去掉了单非终结符的归约,一旦找到最左素短语,就将它归约成一个非终结符。

在算符优先分析法分析过程中,可以设置一个栈S,用来存放归约或者待形成最左素短语的符号串,用一个工作单元a存放当前读入的输入字符,归约成功的标志是当读入的输入字符是句子的结束符号#时,栈S中只剩下#N。

3. 实验内容

给定一个上下文无关文法G:

<常量说明部分>→const<常量定义>{,<常量定义>}

<常量定义>→<标识符>=<无符号整数>

<无符号整数>→<数字>{<数字>}

<变量说明部分>→{var}01 <标识符>{,<标识符>}:integer;∣{var}01 <标识符>{,<标识符>}:real;∣{var}01 <标识符>{,<标识符>}:boolean;

<标识符>→<字母>{<字母>∣<数字>}

<语句部分>→<语句>∣<复合语句>

<复合语句>→begin <语句>{;begin<语句>end;} end.

<语句>→<赋值语句>∣<条件语句>∣<循环语句>

<赋值语句>→<标识符>:=<表达式>

<表达式>→[+∣-]<项>∣<表达式>+<项>∣<表达式>-<项>

<项>→<因子>∣<项>*<因子>∣<项>/<因子>

<因子>→<标识符>∣<常量>∣(<表达式>)

<常量>→<无符号整数>

<条件语句>→if <条件> then <语句> else <语句>

<条件>→<表达式><关系运算符><表达式>{(and∣or) <表达式><关系运算符><表达式>}

<循环语句>→while (<条件>){(and∣or) (<条件>)} do <语句>

<关系运算符>→=∣<∣>∣≤∣≥

<字母>→a∣b∣c∣…∣z ∣A∣B∣C∣…∣Z

<数字>→0∣1∣2∣…∣9

编写程序,构造上述文法G的算符优先分析器,使其能实现如下功能:

(1)扫描单词的内部表示形式,按语言的语法规则识别出语法单位(语句等);

(2)对各语法单位进行语法检查;

(3)若发现单词的组成有错误时,输出有关的出错信息。

实验五LR分析

1.实验目的与任务

设计一个LR分析器,实现对表达式语言的分析,加深对LR语法分析方法的基本思想的理解,掌握LR分析器设计与实现的基本方法。

2.实验要求

建立文法及其LR分析表表示的数据结构,设计并实现一个LALR(1)的分析器,对源程序经词法分析后生成的二元式代码流进行分析,如果输入串是文法定义的句子则输出“是”,否则输出“否”。

3.实验内容

(1)文法描述及其LALR(1)分析表

描述表达式语言的文法G如下:

0.S → E

1. E → E+T

2. E → T

3.T → T*F

4.T → F

5. F → (E)

6. F → ID

该文法的LALR(1)分析表如下:

(2)LR分析器总控程序框架如下:

push(0);

advance();

while(Action[tos][sym]!=accept)

if(Action[tos][sym]==’-’) error();

else if (Action[tos][sym]==SN){

push(N);

advance();

}

else if(Action[tos][sym]==RN{

act(N);

pop(产生式N的右部的符号个数);

push(Goto[新tos][产生式N的左部符号]);

}

accept();

上述算法中的有关函数与符号的意义如下:

accept():返回成功状态,LR分析器停止工作;

act(N):执行利用产生式N的归约的动作,通常为产生代码;

advance():丛输入流读下一单词到sym;

error():出错处理;

pop(N):从栈顶弹出N个符号(状态);

push(N):把状态N压入状态栈;

sym:当前输入的单词符号;

tos:栈顶状态号。

(3)存放LR分析表的数据结构

①实现方法一:用一个二维整数数组表示

数组元素为表示动作的整数。数组的行下标为状态号,列下标用来表示终结符与非终结符的整数表示。数组元素可作如下约定:

正整数:表示移进动作,如S6用数6表示;

负整数:表示归约动作,如R5用数-5表示;

0:表示接受,通常为按产生式0归约;

状态号也用整数表示;

用不可能是状态号的较大的整数表示错误转移。

请将上述LALR(1)分析表用这种表示方法,完成LR分析器的程序设计,并添加输出状态栈内容的功能。用上述表达式文法G的一个句子作为输入,进行测试。

②实现方法二:采用压缩表示法

动作Action表的每一行用一个数组表示,数组的第一个元素是本数组中存放的数偶个数,第二个元素到最后一个元素都以[终结符,动作]的数偶的形式存放。再用一个以状态号为下标的下标数组,每个元素含一个指向数偶数组的指针。若数组元素的值为NULL,则表示从此状态无转移弧发出。若分析表有几行相同,则只需保存一行,其它元素则都指向存放这一行表的数组即可。转移Goto表也按同样方式组织,只是这个行数组的数偶为[非终结符,下一状态号]。

每个行数组Yyan表示动作表Yy_action的一行,每个行数组Yygn表示转移表Yy_goto 的一行。假定上述表达式文法G中终结符及非终结符的整数值为:

终结符: # ID + * ( ) 非终结符: S E T F

整数值: 0 1 2 3 4 5 整数值: 0 1 2 3

Yy_action数组是以状态号为下标的下标数组,每个元素含有指向数组Yyan的指针;下标数组Yy_goto的每个元素含有指向数组Yygn的指针。

表达式文法G的LALR(1)分析表的具体压缩表示如下:Yy_action

Yyg000

以上分析表用C语言程序描述如下:

/*

* Yy_action表

*/

int Yya000[]={2,4,2,1,1};

int Yya001[]={4,5,-6,3,-6,2,-6,0,-6};

int Yya003[]={2,0,0,2,7};

int Yya004[]={4,5,-2,2,-2,0,-2,3,8};

int Yya005[]={4,5,-4,3,-4,2,-4,0,-4};

int Yya006[]={2,5,9,2,7};

int Yya009[]={4,5,-53,-5,2,-5,0,-5};

int Yya010[]={4,5,-1,2,-1,0,-1,3,8};

int Yya011[]={4,5,-3,3,-3,2,-3,0,-3};

int Yy_action[]=

{

Yya000, Yya001, Yya000, Yya003, Yya004, Yya005,

Yya006, Yya000, Yya000, Yya009, Yya010, Yya011

};

/*

* Yy_goto表

*/

int Yyg000[]={3,3,5,2,4,1,3};

int Yyg002[]={3,3,5,2,4,1,6};

int Yyg007[]={2,3,5,2,10};

int Yyg008[]={1,3,11};

int Yy_goto[]=

{

Yyg000, NULL, Yyg002, NULL, NULL, NULL,

NULL, Yyg007, Yyg008, NULL, NULL, NULL

};

/*

* 为了进行归约,使用一个Yy_lhs[]数组,其值为代表产生式左部符号的* 整数,数组的下标为产生式号

*/

int Yy_lhs[7]=

{

/* 0 */ 0,

/* 1 */ 1,

/* 2 */ 1,

/* 3 */ 2,

/* 4 */ 2,

/* 5 */ 3,

/* 6 */ 3

};

/*

* Yy_reduce[]数组元素的值为产生式右部符号的个数,

* 以产生式号为数组的下标索引

*/

int Yy_reduce[]=

{

/* 0 */ 1,

/* 1 */ 3,

/* 2 */ 1,

/* 3 */ 3,

/* 4 */ 1,

/* 5 */ 3,

/* 6 */ 1

};

根据以上数组结构,构造函数Yy_next(),其功能是在给定状态和输入符号下,求出应采取的动作或转向的下一状态。

int Yy_next(table,cur_state,symbol)

int **table; /* 要查的表 */

int cur_state; /* 行号 */

int symbol; /* 列号 */

{

int *p=table[cur_state];

int i;

if(p)

for(i=(int)*p++ ; --i>0 ; p+=2)

if(symbol = = p[0])

return(p[1]);

return YYF; /* 出错指示 */

};

指针p指向Yyan数组或Yygn数组,由参数table的值而定。如果table指向Yy_action,则p指向Yyan数组;若table指向Yy_goto,则p指向Yygn数组据。

根据上述LALR(1)分析表压缩表示方法,完成LR分析器的程序设计,并添加输出状态栈内容的功能。用上述表达式文法G的一个句子作为输入,进行测试。

实验六语义分析和中间代码生成

1.实验目的与任务

通过设计一个简单的语义分析和中间代码生成器,加深对语法制导翻译方法的理解,掌握将语法分析所识别的语法范畴变换为中间代码的语义翻译方法。

2.实验要求

采用递归下降语法制导翻译方法,构造语义分析和中间代码生成器,实现对算术表达式、赋值语句、条件语句、循环语句进行语义分析,生成四元式中间代码的序列。

3.实验内容

(1)待分析的语言为C语言的一个子集,其文法用扩充的BNF描述如下:程序→ main( ) 语句块

语名块→′{′语句串′}′

语句串→语句 { ;语句 } ;

语句→赋值语句 | 条件语句 | 循环语句

赋值语句→ ID = 表达式

条件语句→ if (条件)语句块

循环语句→ while(条件)语句块

条件→表达式关系运算符表达式

表达式→项 { + 项 | - 项 }

项→因子 { * 因子 | / 因子 }

因子→ ID | NUM |(表达式)

关系运算符→ < | <= | > | >= | == | !=

上面语名块产生式中的{和}是终结符号,加引号以示区别。

(2)通过为上面文法中的每一个非终结符构造一个递归子程序,设计一个递归下降分析器。

(3)在条件、表达式、赋值语句、条件语句、循环语句的递归子程序中,加入语义分析和生成四元式的代码。

构造下面的语义过程:

int gen(op,arg1,arg2,result):该函数是将四元式(op, arg1,arg2,result)送到四元式表中。

char * newtemp():该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2……

int merg(p1,p2):该函数将以p1和p2为头指针的两条四元式链合并为一条链,合并后的链首为返回值。

int bp(p,t):该函数的功能是把指针p所链接的每个四元式的第四区段都填为t。

实验的输入和输出

输入是语法分析提供的正确的单词串,输出是四元式序列。

流体传动与控制2012实验指导书

《液压传动》实验指导书刘玲腾刘继忠编 南昌大学机电工程学院

实验注意事项 一、液压实验是学习液压传动课程的一个重要组成环节,它可以帮助学生加深理解液压传动中的基本概念,巩固加深课堂教学内容;掌握一般液压元件和回路的实验方法及操作技能;增强实际动手能力,培养学生分析问题和解决问题的能力。因此学生对每次实验必须认真对待。 二、在每次实验前,要认真复习课程有关的内容并预习实验指导书。 三、实验前,应在实验台旁熟悉实验设备和仪器、操纵、测量等方法。在教师指导下,按实验指导书中的内容、步骤进行。 四、在实验室内必须遵守实验室有关规章制度。 五、实验完毕,应整理好场地和仪器、工具,切断电源,认真填写实验报告,按期交指导教师批阅。 六、实验成绩作为本课考核成绩的一部份。

目录 一、液压泵拆装 (1) 二、液压阀拆装 (7) 三、节流调速回路性能实验 (10) 四、液压传动系统回路组装实验 (13)

实验一液压泵拆装 一、实验目的 液压元件是液压系统的重要组成部分,通过对液压泵的拆装可加深对泵结构及工作原理的了解。并能对液压泵的加工及装配工艺有一个初步的认识。 二、实验用工具及材料 内六角扳手、固定扳手、螺丝刀、各类液压泵、液压阀及其它液压元件 三、实验内容及步骤 拆解各类液压元件,观察及了解各零件在液压泵中的作用,了解各种液压泵的工作原理,按一定的步骤装配各类液压泵。 1.轴向柱塞泵 型号:cy14—1型轴向柱塞泵(手动变量) 结构见图1—1 图1-1 (1)实验原理 当油泵的输入轴9通过电机带动旋转时,缸体5随之旋转,由于装在缸体中的柱塞10

编译原理实验(布置版)

编译原理实验(布置版) 实验一:基于有限自动机方法的简单词法分析程序的设计与实现 ——无符号实数识别程序 1、实验目的 通过本实验,使学生进一步熟悉词法分析程序所用的工具——自动机方法,掌握文法转换成自动机的技术及用C语言实现有穷自动机识别单词的方法。 2、实验内容 根据教材P46无符号实数的状态转换图,用C或C++语言编制识别无符号实数的程序。 要求:程序执行时,首先给出提示“Please input a unsigned real number:”,输入数据后,给出对该数据的分析结果信息如“The number is right!”或“The number is error!”,反复输入数据和分析,直到输入回车或其他键符,退出程序执行。 3、实验报告要求 按照实验报告模板格式要求组织内容,必须要有以下内容: (1)无符号实数词法分析的思想。 (2)无符号实数的文法和根据文法生成的状态转换图(即有穷自动机)。 (3)程序处理的流程图 (4)程序运行(测试)结果截图 (5)源程序清单 实验二:综合词法分析程序的设计与实现 1、实验目的 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 2、实验内容 (1)本程序自行规定: 关键字:“begin”,“end”,“if”,“then”,“else”,“while”,“write”,“read”,“do”,“call”,“const”,“char”,“until”,“procedure”,“repeat”。 运算符:“+”,“-”,“*”,“/”,“=” 界符:“{”,“}”,“[”,“]”,“;”,“,”,“.”,“(”,“)”,“:” 标识符:以字母开头的字符串。 空格、回车、换行符跳过。 (2)用C或C++语言编制程序,实现对下述一段源程序的词法分析。 //源程序文件位置及名称:F:\…\MY.TXT begin x:=9 if x>0 then x:=x+1; while a:=0 do b:=2*x/3; end;

电路实验指导书

实验一万用表原理及应用 实验二电路中电位的研究 实验三戴维南定理 实验四典型信号的观察与测量 实验五变压器的原副边识别与同名端测试

实验一万用表原理及使用 一、实验目的 1、熟悉万用表的面板结构以及各旋钮各档位的作用。 2、掌握万用表测电阻、电压、电流等电路常用量大小的方法。 二、实验原理 1、万用表基本结构及工作原理 万用表分为指针式万用表、数字式万用表。从外观上万用表由万用表表笔及表体组成。从结构上是由转换开关、测量电路、模/数转换电路、显示部分组成。指针万用表外观图见后附。其基本原理是利用一只灵敏的磁电式直流电流表做表头,当微小电流通过表头,就会有电流指示。但表头不能通过大电流,因此通过在表头上并联串联一些电阻进行分流或降压,从而测出电路中的电流、电压、电阻等。万用表是比较精密的仪器,如若使用不当,不仅会造成测量不准确且极易损坏。 1)直流电流表:并联一个小电阻 2)直流电压表:串联一个大电阻 3)交流电压表:在直流电压表基础上加入二极管 4)欧姆表

2、万用表的使用 (1)熟悉表盘上的各个符号的意义及各个旋钮和选择开关的主要作用。 (2)使用万用表之前,应先进行“机械调零”,即在没有被测电量时,使万用表指针指在零电压或零电流的位置上。 (3)选择表笔插孔的位置。 (4)根据被测量的种类和大小,选择转换开关的档位和量程,找出对应的刻度线。 (5)测量直流电压 a.测量电压时要选择好量程,量程的选择应尽量使指针偏转到满刻度的2/3左右。如果事先不清楚被测电压的大小时,应先选择最高量程。然后逐步减小到合适的量程。 b.将转换开关调至直流电压档合适的量程档位,万用表的两表笔和被测电路与负载并联即可。 c.读数:实际值=指示值*(量程/满偏)。 (6)测直流电流 a.将万用表转换开关置于直流电流档合适的量程档位,量程的选择方法与电压测量一样。 b.测量时先要断开电路,然后按照电流从“+”到“-”的方向,将万用表串联到被测电路中,即电流从红表笔流入,从黑表笔流出。如果将万用表与负载并联,则因表头的内阻很小,会造成短路烧坏仪表。 c.读数:实际值=指示值*(量程/满偏)。 (7)测电阻 a.选择合适的倍率档。万用表欧姆档的刻度线是不均匀的,所以倍率挡的选择应使指针停留在刻度较稀的部分为宜,且指针接近刻度尺的中间,读数越准确。一般情况下,应使指针指在刻度尺的1/3~2/3之间。

编译原理实验指导

编译原理实验指导 实验安排: 上机实践按小组完成实验任务。每小组三人,分别完成TEST语言的词法分析、语法分析、语义分析和中间代码生成三个题目,语法分析部分可任意选择一种语法分析方法。先各自调试运行,然后每小组将程序连接在一起调试,构成一个相对完整的编译器。 实验报告: 上机结束后提交实验报告,报告内容: 1.小组成员; 2.个人完成的任务; 3.分析及设计的过程; 4.程序的连接; 5.设计中遇到的问题及解决方案; 6.总结。

实验一词法分析 一、实验目的 通过设计编制调试TEST语言的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 二、实验预习提示 1.词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示 成以下的二元式(单词种别码,单词符号的属性值)。 2.TEST语言的词法规则 |ID|ID |NUM →a|b|…|z|A|B|…|Z →1|2|…|9|0 →+|-|*|/|=|(|)|{|}|:|,|;|<|>|! →>=|<=|!=|== →/* →*/ 三、实验过程和指导 1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。 2.编制好程序。 3.准备好多组测试数据。 4.程序要求 程序输入/输出示例:

工程热力学实验 二氧化碳PVT实验指导书(2012.06.07)

二氧化碳临界状态观测及p-v-T关系的测定 一、实验目的 1. 观察二氧化碳气体液化过程的状态变化和临界状态时气液突变现象,增加对临界状态概念的感性认识。 2. 加深对课堂所讲的工质的热力状态、凝结、汽化、饱和状态等基本概念的理解。 3. 掌握二氧化碳的p-v-T关系的测定方法,学会用实验测定实际气体状态变化规律的方法和技巧。 4. 学会活塞式压力计、恒温器等部分热工仪器的正确使用方法。 二、实验原理 当简单可压缩系统处于平衡状态时,状态参数压力、温度和比容之间有确切的关系,可表示为: (,,)=0 (7-1-1) F p v T 或 =(,) (7-1-2) v f p T 在维持恒温条件下、压缩恒定质量气体的条件下,测量气体的压力与体积是实验测定气体p-v-T关系的基本方法之一。1863年,安德鲁通过实验观察二氧化碳的等温压缩过程,阐明了气体液化的基本现象。 当维持温度不变时,测定气体的比容与压力的对应数值,就可以得到等温线的数据。 在低于临界温度时,实际气体的等温线有气、液相变的直线段,而理想气体的等温线是正双曲线,任何时候也不会出现直线段。只有在临界温度以上,实际气体的等温线才逐渐接近于理想气体的等温线。所以,理想气体的理论不能说明实际气体的气、液两相转变现象和临界状态。 二氧化碳的临界压力为73.87bar(7.387MPa),临界温度为31.1℃,低于临界温度时的等温线出现气、液相变的直线段,如图1所示。30.9℃

是恰好能压缩得到液体二氧化碳的最高温度。在临界温度以上的等温线具有斜率转折点,直到48.1℃才成为均匀的曲线(图中未标出)。图右上角为空气按理想气体计算的等温线,供比较。 1873年范德瓦尔首先对理想气体状态方程式提出修正。他考虑了气体分子体积和分子之间的相互作用力的影响,提出如下修正方程: ()()p a v v b RT + -=2 (7-1-3) 或写成 pv bp RT v av ab 320-++-=() (7-1-4) 范德瓦尔方程式虽然还不够完善,但是它反映了物质气液两相的性质和两相转变的连续性。 式(7-1-4)表示等温线是一个v 的三次方程,已知压力时方程有三个根。在温度较低时有三个不等的实根;在温度较高时有一个实根和两个虚根。得到三个相等实根的等温线上的点为临界点。于是,临界温度的等温线在临界点有转折点,满足如下条件: ( )??p v T =0 (7-1-5)

编译原理实验教(学)案

实验教学进度表

实验一 C语言子集编译程序 一、实验目的 用C语言对一个C语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 1.设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 2.编制一个递归下降分析程序,并对C语言的简单子集进行分析。 3.通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换中间代码的语义翻译方法。 二、实验要求、容及学时 词法分析部分:2学时 (一)待分析的C语言子集的词法: 1.关键字 main if else int return void while 所有关键字都是小写。 2.专用符号 = + - * / < <= > >= == != ; : , { } [ ] ( ) 3.其他标记ID和NUM 通过以下正规式定义其他标记: ID→letter(letter|digit)*NUM→digit(digit)* letter→a|…|z|A|…|Z digit→0|…|9 4.空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段空格通

(二)词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中, syn 为单词类别码。 token 为存放的单词自身字符串。 sum 为整型常量。 具体实现时,可以将单词的二元组用结构进行处理。 例如:对源程序 main() { int i=10; while(i) i=i-1; } 的源文件,经词法分析后输出如下序列: (1,main) (26,() (27,)) (30,{) (2,int) (10,i) (21,=) (20,10) (34,;) (7,while) (26,() (10,i) (27,)) (10,i) (21,=) (10,i) (23,-) (20,1) (34,;) (31, }) (三)词法分析程序主要算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 : 注: ①关键字表初值 关键字作为特殊标识符处理,把它们预先安排在一表格中(称为关键字),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表可处理为一个字符串数组(实际为指向字符数组的指针数组),其描述如下: char *KEY_WORDS[8]= {“main”,”int”,”char”,”if”,”else”,”for”,”while”}; 为分析方便,这里把main作关键字处理。 ②程序中需要用到的主要变量:syn,token和sum。 2.扫描子程序(scaner)的算法思想

编译原理实验报告实验一编写词法分析程序

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:13软件四 姓名:丁越 学号: 电子邮箱: 实验地点:秋白楼B720 实验成绩: 日期:2016年3 月18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数 变为二进制形式存入数组中 ci中,并记录其在表中的位置。 lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程, 输出错误编号。 2.实践部分

201209级《发动机原理》实验指导书.

《发动机原理》课程实验指导书彭辅明袁守利编 汽车工程学院 2012年4月

前言 1.实验总体目标、任务与要求 1、巩固所学的理论知识、加深对内燃机性能实验的认识和了解。 2、掌物内燃机性能试验和某些专项试验的试验方法。 3、了解内燃机试验台架的基本组成和常用测试仪表的结构及其工作原理,并掌物其使用方法。 4、掌物对实验数据进行处理以及对实验结果进行分析的基本方法。 2.适用专业 热能与动力工程、车辆工程、汽车服务工程 3.先修课程 《发动机构造》、《热能与动力机械测试技术》。 4.实验项目与学时分配(见表一) 5. 实验改革与特色 通过学生在实验过程中的实际操作,培养学生的实验技能和实际动手的能力,进一步加深对理论知识的掌物和理解。

实验一发动机速度特性 1、掌物发动机速度特性的试验方法。 2、学会对实验数据进行处理,对实验结果进行分析;并绘制发动机速度特性曲线图。 二、实验条件 1、东南4A91电控汽油发动机机(Pemax=77Kw/6000r/min)一台 2、CW150型电涡流测功机一台 3、FST2S发动机数控试验台一台 3、FCM-D转速油耗测量仪一台 4、温度计一只 5、大气压力计一只 6、93#车汽油 20升 三、实验原理 发动机速度特性:在发动机油门开度一定(部分开度或全开)的情况下,研究其功率Pe、扭矩Ttq、耗油量B及燃油消耗率be与转速n之间的关系。 四、实验内容和要求 1、调整测功机负荷及指挥全组协调动作,一人;测功机负荷的调整应均匀、准确,尽量避免大幅度增加或减小测功机负荷,造成发动机的转速剧烈波动。 2、调节、监视发动机油门,一人;当发动机出现异常情况时应立即减小或关闭发动机油门。 3、测量发动机转速和油耗,一人;测量转速时,应注意转速的上下波动情况,当转速的波动值超过±20r/min,该组实验数据应视为无效并重做。 4、调节,监视发动机冷却水出水温度,一人;保持发动机冷却水出水温度稳定在80±5℃范围内,出现气阻现象(无冷却水排除或冷却水出水温度超过100℃),应立即报告,以便及时停机。 5、监视发动机机油压力、温度,一人;出现异常情况应及时报告。 6、记录发动机扭矩(测功机读数)Ttq、发动机转速n、耗油质量△m和耗油时间△t, 一人;实验数据记录应准确无误。 7、绘制实验监督曲线,一人;当发现实验过程中因某些特殊原因而引起误差过大的点,应及时指出,以便补测校正。 五、实验方法与步骤 1、按照附录一《发动机台架试验安全操作规范》,作好试验前的准备工作。确认发

《编译原理实验》

《编译原理实验》 —LR分析器 院、系(部) 计算机科学与技术学院 专业及班级计算机科学与技术专业1403班 学号1408030322 姓名朱浩 日期2017年5月29日

一、实验目的与任务 设计一个非递归预测分析器,实现对表达式语言的分析,理解自上而下语法分析方法的基本思想,掌握设计非递归预测分析器的基本方法。 二、实验要求 建立文法及其LL(1)分析表表示的数据结构,设计并实现相应的预测分析器,对源程序经词法分析后生成的二元式代码流进行预测分析,如果输入串是文法定义的句子则输出“是”,否则输出“否”。 三、文法描述及其LL(1)分析表 表达式语言(XL) 的语法规则如下: 1.程序→ 表达式; 2.|表达式;程序 3.表达式→ 表达式+ 项 4.|项 5.项→ 项* 因式 6.|因式 7.因式→ num_or_id 8.|(表达式) 将该语言的文法转换为如下的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 → num 6expr’ → +term expr’ 13 system_goal → prgm 7expr’ →ε

四、文法及其LL(1)分析表的数据结构 文法的产生式可用数组Yy_pushtab[]存放。数组的第一个下标是产生式号,第一个产生式的序号为0;每列按逆序存放该产生式右部各符号的常数值,并以0结束。对于该表达式语言XL的LL(1)分析表,可用数组Yy_d[]存放。第一个下标是非终结符数值,第二个下标是终结符数值,数组元素的值为:0(表示接受) ,1(表示产生式号) ,-1(表示语法错) 。 数组Yy_d[]的具体内容及表示如下: 0 1 2 3 4 5 6 prgm 256 prgm’ 257 expr 258 term 259 expr’ 260 factor 261 term’ 262 system_goal 263 数组Yy_pushtab[]的具体内容及表示如下:

电路实验指导书-

电路分析 实 验 指 导 书 安徽科技学院 数理与信息工程学院

实 验 内 容 实验一 电阻元件伏安特性的测量 一、实验目的 (1)学习线性电阻元件和非线性电阻元件伏安特性的测试方法。 (2)学习直流稳压电源、万用表、直流电流表、电压表的使用方法。 二、实验原理及说明 (1)元件的伏安特性。如果把电阻元件的电压取为横坐标(纵坐标),电流取为纵坐标(横坐标),画出电压和电流的关系曲线,这条曲线称为该元件的伏安特性。 (2)线性电阻元件的伏安特性在μ-i(或i-μ)平面上是通过坐标原点的直线,与元件电压或电流的方向无关,是双向性的元件,如图2.1-1,元件上的电压和元件电流之间的关系服从欧姆定律。元件的电阻值可由下式确定:α=μ= tg m m i R i u ,其中m u 、m i 分别为电压和电流在μ-i平面坐标上的比例尺,α是伏安特性直线与电流轴之间的夹角。我们经常使用的电阻器,如金属膜电阻、绕线电阻等的伏安特性近似为直线,而电灯、电炉等器件的伏安特性曲线或多或少都是非线性的。 (3)非线性电阻元件的伏安特性不是一条通过原点的直线,所以元件上电压和元件电流之间不服从欧姆定律,而元件电阻将随电压或电流的改变而改变。有些非线性电阻元件的伏安特性还与电压或电流的方向有关,也就是说,当元件两端施加的电压方向不同时,流过它的电流完全不同,如晶体二极管、发光管等,就是单向元件,见图2.1-2。 根据常见非线性电阻元件的伏安特性,一般可分为下述三种类型: 1)电流控制型电阻元件。如果元件的端电压是流过该元件电流的单值函数,则称为电流控制型电阻元件,如图2.1-3(a )所示。 2)电压控制型电阻元件。如果通过元件的电流是该元件端电压的单值函数,则称为电压控制型电阻元件,如图2.1-3(b)所示。 3)如果元件的伏安特性曲线是单调增加或减小的。则该元件既是电流控制型又是电压控制型的电阻元件,如图2.1-3(c )所示。 (4)元件的伏安特性,可以通过实验方法测定。用电流表、电压表测定伏安特性的方法,叫伏安法。测试线性电阻元件的伏安特性,可采用改变元件两端电压测电流的方法得到,或采取改变通过元件的电流而测电压的方法得到。

电子_基础实验指导书 2012

电子科技专业基础实验 电子科学与技术学院编 2012.1

电子科技专业基础实验 1 微波基本测量 (1) 2 二维电场的模拟实验 (7) 3 电磁波的布拉格衍射实验 (12) 4 射频图像传输 (16) 5 偏振光实验 (23) 6 光源光谱特性的测量 (29) 7 光磁共振实验 (32) 8 半导体光电导实验 (41) 9 光栅实验 (47) 10 单色仪的标定实验 (51) 11 迈克尔逊干涉仪 (54) 12 半导体光伏效应实验 (60) 13 半导体霍尔效应实验 (66) 14 PN结正向压降温度特性实验 (72) 15 半导体少数载流子寿命测量 (77) 16 四探针测电阻率实验 (80)

实验1 微波基本测量技术 一.实验目的 1. 学习微波的基本知识; 2. 了解波导测量系统,熟悉基本微波元件的作用; 3.了解微波在波导中传播的特点,掌握微波基本测量技术; 4.掌握大、中、小电压驻波系数的测量原理和方法; 5.学习用驻波测量线校准晶体检波器特性的方法。 二.实验原理 (一)微波基本知识 在微波波段,随着工作频率的升高,导线的趋肤效应和辐射效应增大,使得普通的双导线不能完全传输微波能量,而必须改用微波传输线。常用的微波传输线有平行双线、同轴线、带状线、微带线、金属波导管及介质波导等多种形式的传输线,本实验用的是矩形波导管,波导是指能够引导电磁波沿一定方向传输能量的传输线。 传输线的特性参量与工作状态在波导中常用相移常数。波导波长,驻波系数等特性参量来描述波导中的传输特征,对于一个横截面为b a ×的矩形波导中的TE 10波: 自由空间波长 /c f λ=, 截止(临界)波长 2c a λ=, 波导波长 /g λλ= (1) 相移常量 2/g βπλ=,, 反射系数 Γ=E 反/E 入 驻波比 max min /E E ρ=, 由此可见,微波在波导中传输时,存在着一个截止波长c λ,波导中只能 传输λ<c λ的电磁波。波导波长g λ>自由空间波长λ。 在实际应用中,传输线并非是无限长,此时传输线中的电磁波由人射波 和反射波迭加而成,传输线中的工作状态主要决定于负载的情况。 (1)波导终端接匹配负载时,微波功率全部被负载吸收,无反射波, 波导中呈行驻波状态.此时|Γ|=0,ρ=l 。

编译原理实验二

编译原理二 -------词法分析器一.问题描述 词法分析程序的功能: 输入源程序,输出单词符号,如图所示: 单词符号 处理过程:在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、无符号常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。 二.需求分析 1.对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词类型,单词符号)显示; 2.可以将要分析的程序保存到文件中进行读取; 3.删除无用的空白字符、回车符、及其它非实质性符号。 三.程序设计 本程序规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat"

(2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 对于一段可能的输入代码,其结果在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 关键字或标识符的判断:读入一串字符,将ASCII码在字母范围的字符存入数组中,将该数组与设置好的关键字比较,如果相等则输出是关键字,否则继续读入直至下一字符既非数字也非字母,输出为标识符; 数字的判断:若跟在字母后面则一起输出为标识符,否则输出为数字; 界符、运算符的判断:直接判断其ASCII码 运行过程为: 1.预处理:把源文件一个字符一个字符的读入词法分析程序设置的输入字符结构体数组中(输入缓冲区),读入过程要删除多余的空格; 2.源程序字符数组中获得单词, 编码为二元式.:二元式采用结构体数组存储, 把单词类型和词元记录下来。

电路实验指导书

实验一元件伏安特性的测试 一、实验目的 1.掌握线性电阻元件,非线性电阻元件及电源元件伏安特性的测量方法。 2.学习直读式仪表和直流稳压电源等设备的使用方法。 二、实验说明 电阻性元件的特性可用其端电压U与通过它的电源I之间的函数关系来表示,这种U与I的关系称为电阻的伏安关系。如果将这种关系表示在U~I平面上,则称为伏安特性曲线。 1.线性电阻元件的伏安特性曲线是一条通过坐标原点的直线,该直线斜率的倒数就是电阻元件的电阻值。如图1-1所示。由图可知线性电阻的伏安特性对称于坐标原点,这种性质称为双向性,所有线性电阻元件都具有 这种特性。 -1 图 半导体二极管是一种非线性电阻元件,它的阻值随电流的变化而变化,电压、电流不服从欧姆定律。半导体二极管的电路符号用 表示,其伏安特性如图1-2所示。由图可见,半导体二极管的电阻值随着端电压的大小和极性的不同而不同,当直流电源的正极加于二极管的阳极而负极与阴极联接时, 二极管的电阻值很小,反之二极管的电阻值很大。 2.电压源 能保持其端电压为恒定值且内部没有能量损失的电压源称为理想电压源。理想电压源的符号和伏安特性曲线如图1-3(a)所示。 理想电压源实际上是存在的,实际电压源总具有一定的能量损失,这种实际电压源可以用理想电压源与电阻的串联组合来作为模型(见图1-3b)。其端口的电压与电流的关系为: s s IR U U- = 式中电阻 s R为实际电压源的内阻,上式的关系曲线如图1-3b 所示。显然实际电压源的内阻越小,其特性越接近理想电压源。 实验箱内直流稳压电源的内阻很小,当通过的电流在规定的范围内变化时,可以近似地当作理想电压源来处理。 (a) (b) i s I 1

《编译原理》实验指导书

《编译原理》实验指导书 实验目的和内容 编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法,并加深对编译技术的认识。 实验内容共需实现编译器的词法、语法和语义分析程序三个组成部分。要求学生必须完成每个实验的基本题目要求,有余力的同学可尝试实验的扩展要求部分。 实验报告 要求每人针对所完成的实验内容上交一份实验报告,其中主要包括三方面内容:1、实验设计:实验采用的实现方法和依据(如描述语言的文法及其机内表示,词分析 的单词分类码表、状态转换图或状态矩阵等,语法分析中用到的分析表或优先矩阵等,语法制导翻译中文法的拆分和语义动作的设计编写等);具体的设计结果(应包括整体设计思想和实现算法,程序结构的描述,各部分主要功能的说明,法以及所用数据结构的介绍等)。 2、程序代码:实验实现的源程序清单,要求符合一般的程序书写风格,有详细的注释。 3、实验结果分析:自行编写若干源程序作为测试用例,对所生成的编译程序进行测试 (编译程序的输入与输出以文件的形式给出);运行结果分析(至少包括一个正确和一个错误单词或语句的运行结果);以及改进设想等。 注意事项 1、电子版实验报告和源程序在最后一次机时后的一周内上交。(每个同学上交一个压 缩文件,其命名格式为“学号_姓名.rar”,内含实验报告和一个命名为“源程序” 的文件夹。注意提交的源程序应是经过调试、测试成功的较为通用的程序,并应有相应的注释、运行环境和使用方法简介。) 2、不接受不完整的实验报告和没有说明注释的源程序,或者说明与程序、运行结果不 符合的作业。 特别鼓励:扩展题目 1、为亲身经历一个小型编译器的开发全过程,触摸一下与实际编译器开发相关的工作, 大家可以自由组成3人左右的小组,推举组长,模拟一个团队分工协作开发大型软件的实战环境,融入软件工程的思想规范和一般理论方法,初步体验从系统分析设计、编码测试到交付维护的一个完整编译器软件的开发过程。要求组长为每个小组成员分配主要负责的任务,完成相应的分析设计员、程序员和测试员等角色的工作,并以小组为单位提交一份实验报告和源程序,在报告封面上写明每个同学主要完成和负责的部分。 2、以组为单位完成的实验内容至少必须整合词法、语法和语义三个部分的实验,对于 选定的适当规模的文法(如C语言的一个大小适宜的子集),进行系统的总体设计、功能分析、编码测试等工作。完成一个从对源程序的词法分析开始,到中间代码生成的完整的编译器前端的开发,使所涉及到的编译系统的各个组成模块有机地衔接在一起,提交一份完整的实验报告和源程序,并将以下几个方面描述清楚:

单片机原理实验指导书(2012.10)

《单片机原理》实验指导书 计算机科学与技术系2012年8月

目录 第一部分单片机仿真实验 (1) 实验一:流水灯实验 (1) 实验二:中断实验 (4) 实验三:定时器中断实验 (6) 实验四:串行口实验 (9) 实验五:矩阵式键盘输入识别 (13) 实验六:LCD循环显示设计 (19) 第二部分单片机硬件实验............................错误!未定义书签。第一章试验箱系统概述 ...................................错误!未定义书签。 一、系统地址分配........................................... 错误!未定义书签。 二、系统接口定义........................................... 错误!未定义书签。 三、通用电路简介........................................... 错误!未定义书签。第二章实验指导...............................................错误!未定义书签。实验七P1口亮灯和P1口加法器实验........... 错误!未定义书签。实验八简单I/O口扩展(选作).................. 错误!未定义书签。实验九8255控制交通灯................................ 错误!未定义书签。实验十128*64LCD液晶显示 .......................... 错误!未定义书签。

第一部分单片机仿真实验 实验一:流水灯实验 一、实验目的: 通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。 二、实验原理图 实验参考电路图如下: 三、参考实验程序 //流水灯实验 #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

数字电路实验指导书2016

***************************************************** ***************************************************** *********************************************** 数字电路 实验指导书 广东技术师范学院天河学院电气工程系

目录 实验系统概术 (3) 一、主要技术性能 (3) 二、数字电路实验系统基本组成 (4) 三、使用方法 (12) 四、故障排除 (13) 五、基本实验部分 (14) 实验一门电路逻辑功能及测试 (14) 实验二组合逻辑电路(半加器全加器及逻辑运算) (18) 实验三译码器和数据选择器 (43) 实验四触发器(一)R-S,D,J-K (22) 实验五时序电路测试及研究 (28) 实验六集成计数器161(设计) (30) 实验七555时基电路(综合) (33) 实验八四路优先判决电路(综合) (43) 附录一DSG-5B型面板图 (45) 附录二DSG-5D3型面板图 (47) 附录三常用基本逻辑单元国际符号与非国际符号对照表 (48) 附录四半导体集成电路型号命名法 (51) 附录五集成电路引脚图 (54)

实验系统概述 本实验系统是根据目前我国“数字电子技术教学大纲”的要求,配合各理工科类大专院校学生学习有关“数字基础课程,而研发的新一代实验装置。”配上Lattice公司ispls1032E可完成对复杂逻辑电路进行设计,编译和下载,即可掌握现代数字电子系统的设计方法,跨入EDA 设计的大门。 一、主要技术性能 1、电源:采用高性能、高可靠开关型稳压电源、过载保护及自动恢复功能。 输入:AC220V±10% 输出:DC5V/2A DC±12V/0.5A 2、信号源: (1)单脉冲:有两路单脉冲电路采用消抖动的R-S电路,每按一次按钮开关产生正、负脉冲各一个。 (2)连续脉冲:10路固定频率的方波1Hz、10Hz、100Hz、1KHz、10KHz、100KHz、500KHz、1MHz、5MHz、10MHz。 (3)一路连续可调频率的时钟,输出频率从1KHz~100KHz的可调方波信号。 (4)函数信号发生器 输出波形:方波、三角波、正弦波 频率范围:分四档室2HZ~20HZ、20HZ~200HZ、200HZ~2KHZ、2KHZ~20HZ。 3、16位逻辑电平开关(K0~K15)可输出“0”、“1”电平同时带有电平指示,当开关置“1”电平时,对应的指示灯亮,开关置“0”电平时,对应的指示灯灭,开关状态一目了然。 4、16位电平指示(L0~L15)由红、绿灯各16只LED及驱动电路组成。当正逻辑“1”电平输入时LED红灯点亮,反之LED绿灯点亮。

编译原理实验指导书2010

《编译原理》课程实验指导书 课程编号: 课程名称:编译原理/Compiler Principles 实验总学时数: 8 适用专业:计算机科学与技术、软件工程 承担实验室:计算机学院计算机科学系中心实验室、计算机技术系中心实验室 一、实验教学的目的与要求 上机实习是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实习题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的2次上机实验都属于一种设计类型的实验,每个实验的训练重点在于基本的编译技术和方法,而不强调面面俱到;实验的目的是旨在使学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容;培养学生编制算法的能力和编程解决实际问题的动手能力。 要求学生在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法设计和程序代码的编写;上机时应随带有关的编译原理教材或参考书;要学会程序调试与纠错。 每次实验后要交实验报告,实验报告的内容应包括: (1)实验题目、班级、学号、姓名、完成日期; (2)简要的需求分析与概要设计; (3)详细的算法描述; (4)源程序清单; (5)给出软件的测试方法和测试结果; (6)实验的评价、收获与体会。 开发工具: (1)DOS环境下使用Turbo C; (2)Windows环境下使用Visual C++ 。 考核: 实验成绩占编译原理课程结业成绩的10%。 三、单项实验的内容和要求: 要求每个实验保证每个学生一台微机。 实验一(4学时):单词的词法分析程序设计。 (一)目的与要求 1.目的 通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

2012-AutoCAD实验指导书

实验一熟悉AutoCAD基本环境及设置 一实验目的 1、熟悉AutoCAD的软硬件环境、启动、退出、文件管理等方法; 2、熟悉AutoCAD的工作界面、系统配置的修改等; 3、熟悉键盘和鼠标输入命令的方法。 二实验内容 1、认识AutoCAD的硬件及设备配置,学习启动、退出AutoCAD; 2、练习文件管理,包括新建文件、打开旧文件、保存、另存文件等操作; 3、练习用“选项”对话框进行常用的缺省配置修改; 4、练习用键盘和鼠标输入命令,学习工作界面中各部分功能区的使用。 三实验过程及说明 1.启动AutoCAD 进入WindowsXP开始界面后,用鼠标双击桌面上AutoCAD图标,或执行“开始”菜单中AutoCAD命令启动AutoCAD。 2.进入AutoCAD后基本练习 1)新建一文件,分别用“从草图开始”、“使用样板”、“使用向导”三种创建方法; 2)对应三种不同的创建新图的方法,练习绘图界限(LIMITS)、绘图单位(UNITS)等基本设置的操作; 3)熟悉工作界面,主要包括:标题行、下拉菜单、功能区、绘图区、工具栏(标准、绘图屏幕菜单)、命令提示区、状态栏、滚动条、十字光标等,如图1-1所示; 图1-1 AutoCAD 界面的构成

4)了解系统配置选项的修改,通过“选项”对话框练习常用的三项修改:绘图背景色、按实际情况显示线宽、自定义右键功能;(选择“显示”选项卡,修改绘图区背景颜色为白色;选择“用户系统配置”选项卡,设置线宽随图层、按实际大小显示;选择“用户系统配置”选项卡,自定义右键功能。) 说明:其它选项的缺省配置是否修改,根据具体情况自定。 3.退出AutoCAD 退出时,切不可直接关机(会丢失文件),应按下列方法之一进行: 1)从下拉菜单中选取:“文件”→“退出” 2)从键盘键入:EXIT或QUIT 3)单击工作界面标题行右边的“关闭”按钮 如果当前图形没有全部存盘,输入退出命令后,AutoCAD会弹出“退出警告”对话框,操作该对话框后,方可安全退出AutoCAD。 4.用键盘和鼠标练习输入命令LINE、ERASE、UNDO、REDO、ESC等。 1)用LINE命令画几组直线。通过练习要熟悉“C”选项和“U”选项的应用; 2)用ERASE命令擦除。通过它要逐步熟悉3种选择实体的方式;(窗交,框选,单选) 3)用UNDO(U)命令撤销前3个命令,用REDO返回一个命令; 4)用ESC终止命令,回到“Command:”提示符下。 注意: 所有命令在“Command:”提示符下输入,可用键盘直接输入命令名,也可再下拉菜单、功能区或屏幕菜单中直接点取;操作命令中需要选项时,请单击右键,使用右键菜单选项。 四实验题目 1)用NEW命令新建一张图(图幅为A3),进行基本设置后,运用键盘、鼠标等输入命令画图。以实验报告形式说明你新建该图形的步骤及设置情况。 2)用QSAVE命令指定路径,已“一面视图”为名保存。 3)用SAVE AS(另存为)命令将图形另存到软盘上或硬盘上的另一处。 4)关闭当前图形,用OPEN命令打开图形文件“一面视图”。 5)练习结束,关闭当前图形,正确退出AutoCAD。 6)以实验报告形式回答以下问题: (1)AutoCAD的操作界面由哪几部分组成?各部分的作用是什么? (2)如何设置作图窗口的颜色和十字光标的大小? (3)图形文件的“Save”(保存)与“Save as”(另存)有何区别?

相关文档
最新文档