文档库 最新最全的文档下载
当前位置:文档库 › 2012城市学院《编译原理》实验指导书

2012城市学院《编译原理》实验指导书

2012城市学院《编译原理》实验指导书
2012城市学院《编译原理》实验指导书

《编译原理》实验指导书

适用实验课时:30

适用对象:城市学院计算机系

实验目的和内容

编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法分析程序、语法分析程序和简单语义处理程序,验证实际编译系统的实现方法,并加深对编译理论的认识。

基本实验分为三个部分,实验一识别无符号数的词法分析器设计实现、实验二无符号数的算术四则运算LR语法分析器设计实现,实验三是无符号数的算术四则运算语义处理程序实现,总的实验学时为30课时。每部分基本实验还包括若干扩展实验,供编程能力较强的学生自愿进行。

要求每个学生独立完成三个基本实验的设计和编程实现,编程工具自选。并形成完整的实验报告。

实验一词法分析程序实现

一、实验目的与要求

通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。

二、实验内容

选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。

输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。

输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。

三、实现方法与环境

1、首先设计识别各类单词的状态转换图。

描述无符号常数的确定、最小化状态转换图如图1所示。其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>,1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。

图1 文法G[<无符号数>]的状态转换图

其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>,1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。

在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。

四则运算算术符号的识别很简单,直接在状态图的0状态分别引出相应标记的矢线至一个新的终态即可。根据自己的习惯,也可以将其转换为状态矩阵形式。

2、词法分析程序编写

根据描述语言中各类单词的文法状态转换图或状态矩阵,利用某种语言(C语言或JA V A语言)直接编写词法分析程序。

3、词法分析程序测试

用于测试扫描器的实例源文件中应有词法正确的,也应有错误的字符串,对于输入的测试用例的源程序文件,以对照的形式将扫描器的分析结果信息在输出文件中表示出来。

四、参考资料

实现无符号数识别的参考方法:将设计的状态转换图直接转化为一张程序流程图,并在外层再增加一个以EOF为循环终止条件的while循环,即形成能连续识别各类单词的词法分析程序。

各类单词的编码建议如表1。

表1 单词的内部编码

五、扩展实验

1、试对基础实验识别的单词种类进行扩充,构造识别以下单词的词法分析程序。

语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。

表2 扩展单词分类码表

处理过程:在此为了使词法分析程序结构比较清晰,且尽量避免某些枝节问题的纠缠,假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;在源程序的输入文本中,关键字、标识符、整常数之间,若未出现关系和算术运算符以及赋值符,则至少须用一个空白字符加以分隔。作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表已事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。采用上述策略后,针对表2中部分单词可以构造一个如图2所示的有限自动机(以状态转换图表示)。在图2中添加了当进行状态转移时,词法分析程序应执行的语义动作。根据图2,可用C语言编写出符合以上几项要求的一个相应的扫描器程序,如程序一所示。

图2 识别表I所列语言中的部分单词的DFA及相关函数图2所出现的变量及函数的含义和功能说明如下:

函数GETCHAR:每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。

字符数组TOKEN:用来依次存放一个单词词文中的各个字符。

函数CAT:每调用一次,就把当前ch中的字符拼接于TOKEN中所存字符串的右边。

函数LOOKUP:每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关键字的类别码赋给整型变量c;否则将c置为零。

函数RETRACT:每调用一次,就把扫描指示器回退一个字符位置(即退回多读的那个字符)。

函数OUT:一般仅在进入终态时调用此函数,调用的形式为OUT(c,VAL)。其中,实参c为相应单词的类别码或其助记符;当所识别的单词为标识符和整数时,实参V AL为TOKEN(即词文分别为字母数字串和数字串),对于其余种类的单词,V AL均为空串。函数OUT的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。

参考程序:

# include

# include

# include

# define ID 6

# define INT 7

# define LT 8

# define LE 9

# define EQ 10

# define NE 11

# define GT 12

# define GE 13

char TOKEN[20];

extern int lookup (char*);

extern void out (int, char*);

extern report_error (void);

void scanner_example (FILE *fp)

{

char ch; int i, c;

ch=fgetc (fp);

if (isalpha (ch)) /*it must be a identifer!*/ {

TOKEN[0]=ch; ch=fgetc (fp); i=1;

while (isalnum (ch))

{

TOKEN[i]=ch; i++;

ch=fgetc (fp);

}

TOKEN[i]= ′\0′

fseek(fp,-1,1); /* retract*/

c=lookup (TOKEN);

if (c==0) out (ID,TOKEN); else out (c," ");}

else

if(isdigit(ch))

{

TOKEN[0]=ch; ch=fgetc(fp); i=1;

while(isdigit(ch))

{

TOKEN[i]=ch; i++;

ch=fgetc(fp);

}

TOKEN[i]= ′\0′;

fseek(fp,-1,1);

out(INT,TOKEN);

}

else

switch(ch)

{

case ′<′: ch=fgetc(fp);

if(ch==′=′)out(LE," ");

else if(ch==′>′) out (NE," ");

else

{

fseek (fp,-1,1);

out (LT," ");

}

break;

case ′=′: out(EQ, " "); break;

case ′>′: ch=fgetc(fp);

if(ch==′=′)out(GE," ");

else

{

fseek(fp,-1,1);

out(GT," ");

}

break;

default: report_error( ); break;

}

return;

}

提示:扫描器所用的若干函数以及主程序有待于具体编写,并需事先建立好保留字表,以备查询。例如:

/* 建立保留字表*/

#define MAX_KEY_NUMBER 20 /*关键字的数量*/

#define KEY_WORD_END “waiting for your expanding”/*关键字结束标记*/

char *KeyWordTable[MAX_KEY_NUMBER]={“begin”, “end”, “if”, “then”, “else”, KEY_WORD_END};

/* 查保留字表,判断是否为关键字*/

int lookup (char *token)

{

int i=0;

while (strcmp(KeyWordTable[n], KEY_WORD_END)) /*strcmp比较两串是否相同,若相同返回0*/ {

if (!strcmp(KeyWordTable[n], token)) /*比较token所指向的关键字和保留字表中哪个关键字相符*/

{

return n+1; /*设置正确的关键字类别码,并返回此类别码的值*/

break;

}

n++;

}

return 0; /*单词不是关键字,而是标识符*/

}

另外,在扫描源程序字符串时,一旦识别出关键字、标识符、整常数以及运算符中之一,即以二元式形式(类别编码,值)输出单词到指定文件中。每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。

2、在词法分析过程中建立变量名表和常数表,以备以后的编译过程(如语法分析)查询;扩充关键字的数目、增加单词类别(如逻辑运算符等)、将常数分成字符串常量、整型常量和实型常量等;添加词法分析中单词出错的位置、错误类型检查,以及删除注释部分等。

3、可视化词法分析程序测试。

实验二语法分析程序实现

一、实验目的与要求

通过设计、编制、调试典型的SLR(1)语法分析程序,实现对实验一所得词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。

二、实验内容

选择对各种常见高级程序设计语言都较为通用的语法结构无符号数的算术四则运算作为分析对象,给出其文法描述(注意应与所采用的语法分析方法比较贴近),设计并实现一个完整的语法分析程序。

输入:由实验一输出的单词类别串,如1,3,1。

输出:对于所输入的源程序,如果输入符号串是给定文法定义的合法句子,则输出“RIGHT”,并且给出每一步归约的过程;如果不是句子,即输入串有错误,则输出“ERROR”,并且显示已经归约出的各个文法符号,以及必要的出错说明信息。

三、实现方法与环境

1、首先根据算术四则运算的语法定义,构造SLR(1)分析表。

无符号数的算术四则运算的语法可表示为:

E->E+T| E-T|T

T->T*F| T/F|F

F->(E)|i

2、语法分析程序编写

设置输入缓冲区、状态栈、符号栈,并根据SLR(1)分析表利用某种语言(C 语言或JA V A语言)直接编写移进、归约、接受子程序,编写语法分析程序。

3、语法分析程序测试

用于测试的实例源文件中应有语法正确的,也应有语法错误的符号串,以对照的形式将分析结果信息在输出文件中表示出来。

四、扩展实验

1、对以下复合语句进行语法分析器的设计与实现。

G[<复合语句>]:

<复合语句> → begin<语句表>end

<语句表> → <语句>|<语句>;<语句表>

<语句> → <赋值语句>

<赋值语句> → <变量>:=<算术表达式>

<算术表达式> → <项> | <算术表达式>+<项> | <算术表达式>-<项>

<项> → <因式> | <项>*<因式> | <项>/<因式>

<因式> → <变量> | <常数> | (<算术表达式>)

<变量> → <标识符>

<标识符> → <标识符> <字母> | <标识符> <数字> | <字母>

<常数> → <整数> | <浮点数>

<整数> → <数字> | <数字> <整数>

<浮点数> →? <整数> | <整数> ? <整数>

<字母> → A|B|C|…|X|Y|Z|a|b|c|…|x|y|z

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

2、增强语法检查功能,对出错位置、错误类型给予提示。

3、可视化语法分析程序测试。

实验三语义分析程序实现

一、实验目的与要求

通过设计、编制、调试一个简单的语义处理分析程序,实现对实验一和实验二所得单词和语句的语义信息简单处里,进一步掌握语义处理的内容和简单方法。

二、实验内容

对实验一进行扩展,对识别的无符号数进行计值,并将输出形式改为(类别码,值)的二元式形式。

对实验二进行扩展,在语法分析的基础上,增加语义操作来实现语法制导翻译。对于给定文法中的每一产生式,编写相应的语义子程序。在语法分析过程中,每当用一产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,计算并输出算术表达式的值。

将实验一与实验二的程序合并,以能对完整的输入源文件进行词法分析生成中间文件,然后进行语法制导翻译,输出最终翻译结果。

输入:由无符号数和+,—,*,/, ( , ) 构成的算术表达式。

输出:如果输入单词串是合法的无符号数的算术四则运算,输出运算结果,并且给出每一步的分析过程;如果不是无符号数的算术四则运算,输出“非法四则运算表达式”。

三、基本实验题目

对实验一中每个无符号数识别状态插入计值处理,最终获得无符号数的取值。

对实验二进行扩展,在归约(分析表中的归约动作已经反应了运算优先级)处理子程序中加入计值处理,接受子程序中加入输出算数表达式值的处理。

四、参考资料

与无符号数状态转换图对应的包含语义处理过程(据此可计算求得无符号数的数字值)的状态矩阵和参考程序如下所示。

表3包含语义处理过程的识别无符号数的状态矩阵

根据加入语义过程说明的状态转换图直接编写词法分析程序,部分实现代码如下:

1 #include

2 #include

3 #include

4 #define LETTER 0

5 #define DIGIT 1

6 #define POINT 2

7 #define OTHER 3

8 #define POWER 4

9 #define PLUS 5

10 #define MINUS 6

11 #define UCON 7 //Suppose the class number of unsigned constant is 7

12 #define ClassOther 200

13 #define EndState -1

14 int w,n,p,e,d;

15 int Class; //Used to indicate class of the word

16 int ICON;

17 float FCON;

18 static int CurrentState; //Used to present current state, the initial value:0

19

20 int GetChar (void);

21 int EXCUTE (int,int);

22 int LEX (void);

23 int HandleOtherWord (void)

24 {return ClassOther;

25 }

26 int HandleError (void)

27 {printf ("Error!\n"); return 0;}

28

29 int GetChar (void)

30 {

31 int c;

32 c=getchar ( );

33 if(isdigit(c)) {d=c-′0′;return DIGIT;}

34 if (c==′.′) return POINT;

35 if (c==′E′||c==′e′) return POWER;

36 if (c==′+′) return PLUS;

37 if (c==′-′) return MINUS;

38 return OTHER;

39 }

40 int EXCUTE (int state, int symbol)

41 {

42 switch (state)

43 {

44 case 0:switch (symbol)

45 {

46 case DIGIT: n=0;p=0;e=1;w=d;CurrentState=1;Class=UCON;break;

47 case POINT: w=0;n=0;p=0;e=1;CurrentState=3;Class=UCON;break;

48 default: HandleOtherWord( );Class=ClassOther;

49 CurrentState=EndState;

50 }

51 break;

52 case 1:switch (symbol)

53 {

54 case DIGIT: w=w*10+d;break; //CurrentState=1

55 case POINT: CurrentState=2;break;

56 case POWER: CurrentState=4;break;

57 default: ICON=w;CurrentState=EndState;

58 }

59 break;

60 case 2:switch (symbol)

61 {

62 case DIGIT: n++;w=w*10+d;break;

63 case POWER: CurrentState=4;break;

64 default: FCON=w*pow(10,e*p-n);CurrentState=EndState;

65 }

66 break;

67 case 3:switch (symbol)

68 {

69 case DIGIT: n++;w=w*10+d;CurrentState=2;break;

70 default: HandleError( );CurrentState=EndState;

71 }

72 break;

73 case 4:switch (symbol)

74 {

75 case DIGIT: p=p*10+d;CurrentState=6;break;

76 case MINUS: e=-1;CurrentState=5;break;

77 case PLUS: CurrentState=5;break;

78 default: HandleError( );CurrentState=EndState;

79 }

80 break;

81 case 5:switch (symbol)

82 {

83 case DIGIT: p=p*10+d;CurrentState=6;break;

84 default: HandleError( );CurrentState=EndState;

85 }

86 break;

87 case 6:switch (symbol)

88 {

89 case: DIGIT:p=p*10+d;break;

90 default: FCON=w*pow(10,e*p-n);CurrentState=EndState;

91 }

92 break;

93 }

94 return CurrentState;

95 }

96 int LEX (void)

97 {

98 int ch;

99 CurrentState=0;

100 while (CurrentState!=EndState)

101 {

102 ch=GetChar( );

103 EXCUTE (CurrentState,ch);

104 }

105 return Class;

106 }

五、扩展实验

1、对以下复合语句进行语法制导翻译程序的设计与实现。

G[<复合语句>]:

<复合语句> → begin<语句表>end

<语句表> → <语句>|<语句>;<语句表>

<语句> → <赋值语句>

<赋值语句> → <变量>:=<算术表达式>

<算术表达式> → <项> | <算术表达式>+<项> | <算术表达式>-<项>

<项> → <因式> | <项>*<因式> | <项>/<因式>

<因式> → <变量> | <常数> | (<算术表达式>)

<变量> → <标识符>

<标识符> → <标识符> <字母> | <标识符> <数字> | <字母>

<常数> → <整数> | <浮点数>

<整数> → <数字> | <数字> <整数>

<浮点数> →? <整数> | <整数> ? <整数>

<字母> → A|B|C|…|X|Y|Z|a|b|c|…|x|y|z

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

2、可视化语法制导翻译程序测试。

实验报告要求

要求每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。

实验报告主要包括四方面内容:

1、实验设计

实验采用的文法,状态转换图或状态矩阵,程序流程设计和每部分的主要功能说明等。

2、程序代码

实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。

3、实验过程问题分析记录

记录实验过程中发生的编译错误并分析错误原因和解决的方法及结果,参考表3。

表3 实验一中发生的编译错误记录表

4、实验结果

记录最终的程序执行结果,至少包括一个正确单词或表达式的识别结果和一个错误单词或表达式的识别结果。

流体传动与控制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;

编译原理实验指导

编译原理实验指导 实验安排: 上机实践按小组完成实验任务。每小组三人,分别完成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[]的具体内容及表示如下:

2012电子实验指导书初稿7

第6章电子技术课程设计 6.1 课程设计的任务与基本要求 电子技术课程设计的任务: 通过设计题目的完成提高学生在电子技术方面的实践技能,培养学生综合运用理论知识解决实际问题的能力,熟悉电子电路设计的基本思想方法和程序。 电子技术课程设计的基本要求: 一、掌握电子电路设计的基本过程和思想方法,设计的基本过程是: 1、根据设计任务和指标初选电路模型,即方案设计。 2、参数设计计算。 3、确定详细的电路方案。 4、选测元器件。 5、组装、调试、改进电路。 6、确定最后电路并写出总结报告。 基本思想方法:首先将所设计电路分解为不同功能电路的组合,然后设计实现各功能电路。实现各功能电路的思想方法是选用功能电路。第三步是进行功能电路的参数设计计算和功能电路之间联接的实现。 二、培养一定的自学能力和分析、解决问题的能力。学会分析、解决问题的方法,对设计中遇到的问题能通过独立思考,查阅工具书、参考文献找到答案。 三、学会一定的动手能力和操作技能。学会元器件的识别、测试、使用技能,学会用面包板组装电路的技能,掌握电路试验、测量技能、电子仪器使用技能。 四、熟悉典型集成块的使用。集成块的种类很多,应用非常广泛,在课程设计中不可能一一应用。我们仅以应用最广泛的运算放大器、BE555定时器集成计数器、集成触发器、集成门电路为例,通过这些集成块的应用,掌握集成电路的使用方法、特点、注意事项。 五、进一步熟悉掌握典型功能电路的设计方法。如时序电路的设计,单级放大电路的设计等。

6.2 电子电路设计的基本过程与思想方法 电子系统设计的最终目标是做出生产样机或定型产品,整个过程大致可分为以下几个阶段: 1、方案设计 根据设计任务书给定的要求和指标,进行电路的型式设计。完成该部分任务的思想方法:首先将总体电路分解为不同功能电路的组合。尽可能大量查阅参考资料和文献,广泛调查研究,寻找在实际中已获得应用,证明是可靠、先进的各种功能电路。然后进行组合,最终寻找出最佳电路型式。在绝大多数情况下,虽然你所设计的是一个全新的产品,但构成该产品的各功能电路通常是已有的。如果你需要某种新的、目前尚不存在的功能电路,这时,你必须进行这种功能电路的原理设计,这要求较高的技巧和水平,是一种发明创造。所以在电路型式设计时,首先将所设计电路分解为功能电路,然后选用功能电路,设计功能电路的有机组合方法。在选用达不到要求时,再考虑进行全部或部分功能电路的设计。 2、电路参数的设计计算 电路型式确定以后,只是实现了所要求的功能,并没有实现具体的性能指标。必须进一步进行电路结构的详细设计,以及元器件的选用和参数的设计计算。在进行该步工作中,有可能发现电路型式设计的不合理,这时须对电路型式进行修改。 3、元器件的购置与测试 要将你设计的电子电路变成一个电子装置,必须购置到全部元器件。有时,由于某些原因,可能某些元器件无法得到或性能参数达不到要求,这时你必须修改设计。 4、样机制作及调试 这一步要完成构件的加工,元器件的组装,进行整机调试、指标测试,根据测试结果进行方案调整和参数调整。最后做出符合要求的样机。课程设计中此步是用面包板搭接电路,不做外壳和印刷电路板等。 5、工艺设计 根据产品的批量和其他因素,设计出该电子装置的制造工艺。课程设计不进行这一步工作。 6、总结鉴定,形成所需要的全部文件资料 这一步工作是提交该产品鉴定、生产、维修、使用等所必须的各种文件。如:原理图、接线图、元器件明细表、工艺要求、试验、检验方法、使用、维护须知等。课程设计中,要求每一位同学必须提供元器件明细表、原理图、接线图、电路分析及参数设计计算报告,实验结果与数据等。 下面通过一个例子说明电子电路设计的过程与思想方法。 温度、湿度显示、报警、控制电路的设计: 1.首先可以将该电路分解为以下几部分功能电路:

电子_基础实验指导书 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.源程序字符数组中获得单词, 编码为二元式.:二元式采用结构体数组存储, 把单词类型和词元记录下来。

单片机原理实验指导书(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口的

《编译原理》实验指导书

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

编译原理实验报告一

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

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”(另存)有何区别?

编译原理实验指导书2010

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

编译原理实验1

大学学生实验报告 开课学院及实验室:年月日 实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 针对表达各类词语的一组正规表达式,设计一个确定化的最简的有限自动机,对输入的符号串进行单词划分及词类识别。 实验容 将词法分析器分解为以下几个部分: 1.正规表达式的解析:将正规表达式中的符号分解为常量字符、正规表达 式标识符和正规表达式运算符,然后基于正规表达式运算将正规表达式 分解为更小的正规表达式(通过正规表达式运算符进行串接)。 2.正规表达式到NFA的转换:根据转换规则,基于正规表达式运算,将正 规表达式转换为非确定有限自动机,并确定各类词的终止状态。

3.NFA的确定化:通过计算各状态的传递闭包,将NFA确定化,并确定 各类词的终止状态。 4.最小化:通过子集法,求得最简的确定有限自动机,并确定各类词的终 止状态。 例如:分析C语言子集的词法 1)关键字 main if else int return void while (都是小写)2)专用符号 = + —* / < <= < >= = = != ;:,{ } [ ] ( ) 3)其他模式(正规表达式) STRING::=" [^"]* ID::=letter(letter|digit)* INT::=digit digit* letter::= a|…|z|A|…|Z digit::= 0|…|9 4)空格由空白、制表符和换行符组成 空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。 部分单词符号对应的种别码

词法分析程序的功能 输入:所给文法的源程序字符串 输出:二元组(syn, token或sum)构成的序列。其中syn 为单词种别码;token 为存放的单词自身字符串;sum为整型常量(作为常量的值)。实现时,可将单词的二元组用结构进行处理 代码: #include #include

光学设计实验指导书2012

实验一光学设计软件ZEMAX的安装和基本操作 一.实验目的 学习ZEMAX软件的安装过程,熟悉ZEMAX软件界面的组成及基本使用方法。二.实验要求 a)掌握ZEMAX软件的安装、启动与退出的方法。 b)掌握ZEMAX软件的用户界面。 c)掌握ZEMAX软件的基本使用方法。 d)学会使用ZEMAX的帮助系统。 e)学会使用ZEMAX初步仿真光路图。 三.实验内容 (一)界面及基本操作 1.通过桌面快捷图标或“开始—程序”菜单运行ZEMAX,熟悉ZEMAX的初始用户界面,如下图所示: 图1.1ZEMAX用户界面 2.浏览各个菜单项的内容,熟悉各常用功能、操作所在菜单,了解各常用菜单的作用。 3. 熟悉使用各个常用的快捷按钮。

4.学会从主菜单的编辑菜单下调出各种常见编辑窗口(镜头数据编辑、优化函数、多重数据结构)。 5.调用ZEMAX 自带的例子(例如根目录下samples\tutorial\tutorial zoom2.zmx 文件),学会打开常用的分析功能项:草图(2D 草图、3D 草图、渲染模型等)、特性曲线(像差曲线、光程差曲线)、点列图、调制传递函数等,学会由这些图进行简单的成像质量分析。 6.从主菜单中调用优化工具,简单掌握优化工具界面中的参量。 7.掌握镜头数据编辑(LDE )窗口的作用以及窗口中各个行列代表的意思。 8.从主菜单-报告下形成各种形式的报告。 9.通过主菜单-帮助下的操作手册调用帮助文件,学会查找相关帮助信息。 (二) 仿真光路图 根据已拟好的设计草图,在ZEMAX 中实现光路仿真,包括光路系统整体设置、创建光学元件、透镜(组),元件间大致间距等。 1.光路系统的整体设置,包括此光学系统所适用的波长、入瞳直径、视场等,在主菜单-系统里有相应的各个设置。 2.创建光学元件、透镜(组),就是将设计草图中的各种光学元件用ZEMAX 的方式去仿真实现。ZEMAX 仿真的基本元素是面和面间距,仿真创建各种元件基本都以具体设置每个面和面间距的参数来实现。 (1)面:面的基本参数包括面型(Surf:type )、曲率半径(Radius)、厚度(Thickness)、材料(玻璃)(Glass),半口径(Semi-Diameter)等,每一个面对应于LDE 窗口里的一个行,每一个参数对应LDE 窗口里的一列,如下图: ZEMAX 的默认面型是透明标准(Standard )球面,曲率半径和半口径为无穷(Infinity )。面的厚度和材料的定义都是以指定面起向后算到下一个面之间的这一段的厚度和材料。 (2)面间距:指的是该面在光轴上的交点到下一个面在光轴上的交点之间的距离,向右为正,向左为负。常用于标识透镜厚度、元件与元件的间距等。 例如:一个透镜的厚度,可以用透镜的前表面的面厚度值Thickness 来完成仿真;前一个元件与后一个元件的间距,可以用前一个元件的后表面到后一个元件的前表面之间的面间距来完成仿真。 3.根据设计要求和设计草图,估算各个元件之间的大致间距,通过面间距的设置,实现整个光学系统的初步仿真。 4.仿真一个轴上点光源(m μλ587.0=)在物距为u=30mm 时,由焦距为20mm ,材料为BK7,口径为10mm 的单正透镜成像的光路。 四.报告要求: 1. 打开安装目录下的samples\tutorial\tutorial zoom 2.zmx 文件,生成其2D 图、渲染(转角)、像差特征曲线、OPD 曲线、曲面数据报告(第7面)和图解报告4。截屏后打印出来。 2. 试在打印出来的2D 图上标出各个面的位置以及相应面厚度值的具体指向(方向、

相关文档