当前位置:文档之家› 西工大编译原理实验报告

西工大编译原理实验报告

西工大编译原理实验报告
西工大编译原理实验报告

编译原理实验报告

学院:计算机学院

班级:10031101

姓名:

学号:

日期:

目录

1 实验情况概述 (1)

2 主要功能 (2)

3 软件总体结构 (4)

4 详细设计 (5)

5 实验总结 (8)

5.1 调试和bug修改总结...................................................................... 错误!未定义书签。

5.2 测试和结果 (8)

5.3 实验小结 (10)

1 实验情况概述

本实验的主要任务是编写一个小型类Pascal语言的编译器。该编译器应当能够将输入的源程序文本翻译为相应的四元式,并输出符号表。

实验环境:

词法分析器采用flex;

语法分析器采用bison;

软件开发使用Visual C++ 6.0。

功能:

1.能够处理整型、实型两种类型的变量定义;

2.能够识别注释;

3.能够处理程序结构的定义;

4.能够识别算术、关系和逻辑表达式;

5.能够识别常量定义;

6.能够识别顺序、赋值、循环、选择、复合语句等基本的语句类型。

输出结果:

1.将输入的文本输出为四元式序列;

2.输出符号表。

2 主要功能

1.基本功能:

根据词法分析处理说明文件(.l)和语法分析处理说明文件(.y)来识别输入的测试文件是否符合MiniPascal所规定的语法要求;若测试文件符合其语法要求,则输出程序正确运行步骤的四元式表示以及程序运行过程中所用到的的符号表;若不符合,则发生错误,程序无法运行,并提示错误信息。四元式基本形式:(op,arg1,arg2,result),其中op为一个二元(也可以是一元或零元)运算符;arg1,arg2分别为它的两个运算(或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算结果将放入result中。

2.扩展功能:

定义了如下两类四元式:

(jrop,A1,A2,p)—当关系A1 rop A2成立时,转向第p四元式;

(j,0,0,p)—无条件转向第p四元式。

3.程序运行结果如下所示:

4.

3 软件总体结构

3.1 软件包括的程序文件:

ast.c ast.h

ast_lex.c ast_yacc.c

ast_lex.l ast_yacc.y

3.2程序模块如下图所示:

3.3 各程序块之间的传递

词法分析模块与语法分析模块通过单词的内部码来传递信息;字符数组str1存储当前正在识别的单词。语法分析产生的四元式和符号表均存储在结构体中。

4 详细设计

4.1 数据结构

四元式数据结构:

struct QUATERLIST {

char op[6];

char arg1[6],arg2[6],result[6];}

QuaterList[MAXMEMBER];

符号表数据结构:

struct V ARLIST{

char name[20];

int type;/*1为real 0 为int*/

int addr;

} VarList[MAXMEMBER];

表达式数据结构:

struct Eexpr

{

int type,place;

union

{

int Iv;

float Rv;

}Value;

};

其中type为2表示变量,1表示整数,Iv中存储该整数的值,0表示小数,Rv中存储该小数的值。

4.2 主要的算法和辅助函数

void BackPatch(int p,int t);

/*用四元式序号t回填以p为首的链,将链中每个四元式的result域改写为t的*/ int Merge(int p1,int p2);

/*将p1和p2的两条链合并为一条,并返回新链的序号*/

void Gen(char jop[],char arg1[],char arg2[],char result[]);

/*根据所给参数产生一个新的四元式*/

int LookUp(char * Name);

/*在符号表中查找Name,若查到返回序号*/

int Enter(char * Name);

/*以Name为名字查符号表,若未查到,则调用Enter函数添加该项*/

int Entry(char * Name);

/*在符号表中添加Name新项,返回值为序号*/

int NewTemp();

/*产生临时变量,每次调用都定义一个新的临时变量,返回值为该变量的编*/ void ChangeToString(char *dest,struct Eexpr ex);

/*若所给ex为常数,则将其值变为字符串,存入dest中,若所给ex为变量,则将其变量名变为字符串,存入dest中*/

void OutputQ(void);

/*用于输出四元式的函数*/

int yyparse();

/*主语法分析函数*/

void OutputIList(void);

/*输出符号表函数*/

int yyerror(char*);

/*错误处理函数*/

4.3 规则说明

采用语法制导翻译方法,即根据文法中每个产生式所蕴含的语义,为其后续准备若干语义子程序,对所要完成的语义处理功能进行分析描述,在语法分析过程中,当分析器使用该产生式进行语法分析时,除完成语法分析动作外,还将调用为其配备的语法分析子程序,进行相应的语义处理,完成语法翻译工作。例如这个规则:

ISE: IBT Statement Else

{

int q = NXQ;

Gen("j","0","0","-1");

BackPatch($1,NXQ);

$$ = Merge($2,q);

}

;

此时,编译系统已明确当前正在处理的是if-then-else结构,then后所跟的表达式已处理完毕,且else后所跟的表达式的第一个四元式位置已可确定。在准备

翻译else后所跟的表达式之前,首先应紧接then后所跟表达式的四元式序列之后产生一个无条件转四元式,并将此四元式与then后所跟表达式的出口链合二为一,作为整个if-then-else结构的出口,这一信息将作为ISE的综合属性Chain 传递上去;另外,IBT的综合属性此时即可回填。

5 实验总结

5.1 测试和结果

5.1.1 测试程序:

Program a;

Var i,j:integer;

k:real;

Begin

while j>=2 do

if i<5 then

if i>=6 then

k:=7.1

else k:= 8+4

else k:=9;

End.

5.1.2 输出的四元式序列和符号表如下:

5.2 实验小结

本次实验做得还算顺利,最终完成了实验要求的基本功能,一开始拿到题目的时候觉得非常难,因为以前没有接触过编译器的设计,而且对于实验中所用的工具,在之前的实验中都没接触过,有点难以想象。自习研读完老师给的lex和yacc的资料以及所给示例之后,才明白实验的大致流程,一切都弄明白明白之后用代码实现也很快。

我在做实验的过程中编写代码占了一小部分时间,调bug花了大部分时间,最开始调试过程中我是在一个文件夹下利用win_flex.exe和win_bison.exe工具生成.c文件,然后将.c文件复制到VC工程里去,然后发现太麻烦了,就将win_flex.exe和win_bison.exe工具拷到了VC工程里,每次就直接在VC工程下生成.c文件,不需要再复制了。本次实验我是根据老师给的test_ast的例子来写的,在测试布尔表达式时,我发现test_ast规则中关于布尔表达式的部分是有问题的,改成课本上的写法就好了。这次我直接利用Bison提供的支持,有机会的话可以尝试下自己构造抽象语法树。

经过这次实验,自己对编译原理的理论与实践都有了深刻的理解。在语法分析与词法分析的领悟中,自己的学习能力得到了提升,而且这次实验让我们理解了编译器的工作原理。

最后,感谢实验课的老师与助教以及同学对我的帮助。

模电实验报告一_西工大

模 拟 电 路 设 计 实 验 报 告 西北工业大学 赵致远2014302170 裘天成2014302171 2016年1月1日 实验一:电源 1.实验目的: ●学习开关型和线性型直流稳压电源原理。 ●认识电解电容与陶瓷电容的区别。 ●认识电感的作用。 ●学会通过芯片datasheet(数据表)了解其工作特性及参数指标 ●掌握直流稳压电源主要指标的意义与其测试方法。

熟悉开关型与线性型直流稳压电源的优缺点与其区别。 2.实验原理: a.线性稳压原理: 特点: 1.输出电压绝对值必须比输入电压绝对值低 2.输出三极管或者MOS管工作在放大状态,导通压降大,输入输 出电压压差大时效率较低。 3.输出电流能力较小 4.输出电压纹波小 5.无开关动作和EMI b.开关稳压原理: 降压 负压 升压

V SW I L V OUT ΔI L ΔV OUT T ON T 特点: 1.能够实现升压,降压,负压转换 2.采用开关传输能量,效率高。 3.具有大电流输出能力 4.输出纹波较大 5.开关动作产生较大EMI和系统电源噪声 3.实验内容: a.实验1:MC34063开关稳压电路 降压输出5V 负压输出-5V

1. 计算参数。 方法:依据MC34063 数据手册(datasheet)中,降压(step-down)和负压(Voltage-Inverting)部分提供的公式计算。 计算开关频率f和导通时间T ON:首先,依据选定的电容C T的值及其公式计算出T ON大小,之后根据T ON/T OFF比值公式计算出T OFF大小。T ON与T OFF之和为开关周期。计算得出开关频率大小。 通过反馈电阻R1,计算反馈电阻R2值。 已知确定R1,通过datasheet中提供的公式计算设定V OUT所需的电阻R2值。 并且调整好可调电阻大小。 计算最大输出电流I OUT(max) 2. 搭建电路。 3. 测试参数 A: 输出电压V OUT 电压表直接测量输出端的电压,并记录。 B:输出纹波 输入电压V IN=25V,负载电阻100Ω时,通过示波器AC档测试V OUT波形,读取纹波大小。 C: 开关频率f和导通时间T ON 输入电压V IN=25V,负载电阻100Ω时,测量开关节点引脚2的波形频率。 高电平时间为导通时间T ON。 D: 负载调整率 输入电压V IN=25V,在输出负载上串联电流表,接入V OUT端,调节负载电阻100Ω和50Ω变化。记录两个负载下输出电压值,计算负载调整率。 E:线性调整率 输入电压V IN在15V到25V变化,负载电阻100Ω时,记录输出电压变化值,计算线性调整率。 F:效率 输入电压V IN=25V,负载电阻100Ω时效率。 G:短路电流 输出负载0.1ohm,串联电流表,接入V OUT端,记录此时的输出电流值。b.实验2:LM7805线性降压电路

DB1-西工大数据库实验一数据库及表的创建和管理

《数据库原理》实验报告 题目:实验一 学号姓名班级日期数据库和表的创建与管理 一.实验内容、步骤以及结果 1.利用图形用户界面创建,备份,删除和还原数据库和数据表(50分,每小题5分) 数据库和表的要求(第四版教材第二章习题5要求的数据库) 数据库名:SPJ,其中包含四张表:S表, P表, J表, SPJ表 图2.1 S表(供货商表) 图2.2 P表(零件表) 图2.4 SPJ表(供应情况表) 图2.3 J表(工程项目表)

完成以下具体操作: (1)创建SPJ数据库,初始大小为10MB,最大为50MB,数据库自动增长,增长 方式是按5%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB 增长。数据库的逻辑文件名和物理文件名均采用默认值。 (2)在SPJ数据库中创建如图2.1-图2.4的四张表(只输入一部分数据示意即可)。 (3)备份数据库SPJ(第一种方法):备份成一个扩展名为bak的文件。(提示:最 好先删除系统默认的备份文件名,然后添加自己指定的备份文件名) (4)备份数据库SPJ(第二种方法):将SPJ数据库定义时使用的文件(扩展名为 mdf,ldf的数据文件、日志文件等)复制到其他文件夹进行备份。 (5)删除已经创建的工程项目表(J表)。 (6)删除SPJ数据库。(可以在系统默认的数据存储文件夹下查看此时SPJ数据库 对应的mdf,ldf文件是否存在) (7)利用备份过的bak备份文件还原刚才删除的SPJ数据库。(还原数据库) (8)利用备份过的mdf,ldf的备份文件还原刚才删除的SPJ数据库。(附加) (9)将SPJ数据库的文件大小修改为100MB。 (10)修改S表,增加一个联系电话的字段sPhoneNo,数据类型为字符串类型。 实验具体步骤: (1)创建SPJ数据库:右击数据库-->新建数据库-->填写相应参数-->点击确定。如下图: (2)在SPJ数据库中创建四张表:单击数据库SPJ-->右击‘表’-->新建表-->填写参数-->确定。如下图:

数据库实验5实验报告

淮海工学院计算机工程学院实验报告书 课程名:《数据库原理及应用》 题目:数据库的完整性 班级:软件132 学号:2013122907 姓名:莹莹

一.目的与要求 1.掌握索引创建和删除的方法; 2.掌握创建视图和使用视图的方法; 3.掌握完整性约束的定义方法,包括primary key、foreign key等。 二.实验容 1.基于前面建立的factory数据库,使用T-SQL语句在worker表的“部门号”列上创建一个非聚集索引,若该索引已经存在,则删除后重建。 2.在salary表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。 3.建立视图view1,查询所有职工的职工号、、部门名和2004年2月工资,并按部门名顺序排列。 4.建立视图view2,查询所有职工的职工号、和平均工资; 5.建立视图view3,查询各部门名和该部门的所有职工平均工资; 6.显示视图view3的定义; 7.实施worker表的“性别”列默认值为“男”的约束; 8.实施salary表的“工资”列值限定在0~9999的约束; 9.实施depart表的“部门号”列值唯一的非聚集索引的约束; 10.为worker表建立外键“部门号”,参考表depart的“部门号”列。 11.建立一个规则sex:性别=’男’ OR 性别=’女’,将其绑定到“性别”上; 12.删除上面第7、8、9和10建立的约束; 13.解除第11题所建立的绑定并删除规则sex。 三.实验步骤 1 USE factory GO --判断是否存在depno索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='depno') DROP INDEX worker.depno GO --创建depno索引 CREATE INDEX depno ON worker(部门号) GO EXEC sp_helpindex worker GO 2 USE factory GO --判断是否存在no_date索引;若存在,则删除之 IF EXISTS(SELECT name FROM sysindexes WHERE name='no_date') DROP INDEX salary.no_date GO --创建no_date索引

西工大高频第二次实验报告

实验二调幅接收系统实验 一、实验目的和内容: 图2为实验中的调幅接收系统结构图(虚框部分为实验重点,低噪放电路下次实验实现,本振信号由信号源产生。)。通过实验了解和掌握调幅接收系统,了解和掌握三极管混频器电路、中频放大/AGC电路、检波电路。 图2 调幅接收系统结构图 二、实验原理: 1、晶体管混频电路: 给出原理图,并分析其工作原理。 原理:混频电路将高频载波信号或已调波信号经过滤波、放大,将其频率变换为固定频率的信号且该高频滤波信号的频谱内部结构和调制类型保持不变,仅仅改变其频率。 2、中频放大/AGC和检波电路: 给出原理图,并分析其工作原理。 原理:中频输入信号通过中放电路放大中频信号,抑制干扰信号,连接AGC电路实现自动增益控制,接着连接二极管检波电路和低通滤波器,从中取出调制信号。 3、调幅接收系统: 给出系统框图,并简述其工作原理。 检波 低噪放混频 中放 /AGC 本振

工作原理:天线接收信号通过滤波器滤波然后低噪放放大幅度,晶体振荡器振荡出所需的本振信号,让本振信号和其进行混频然后滤波,AGC对其进行放大,输出稳定值,再进行滤波并解调检波,经过功率放大器输出。 三、实验步骤: 1、晶体管混频电路: 1)先调整静态工作点,测量2R4两端电压,调节2W1,使2R4两端电压为0; 2)在V2-5输入10.455MHz,250mV的本振信号,在V2-1输入10MHz、30mV的单载波信号,在V2-3处观测,调节2C3和2B1的大小,改变中频输出,当输出为455KHz的最大不失真稳定正弦波时,完成调试并记录此时的中频输出峰峰值。 3)改变基极偏置电阻2W1,使2R4端电压分别为0.5,1,1.5,2,2.5,3V,重复上述步骤2),记录下不同静态工作点下的中频输出的峰峰值,并计算混频增益,完成表2-1. 2、中频放大/AGC和检波电路: 1)调节直流静态工作点:闭合开关K3,电路仅接入12v直流电压,调节可调电阻3W1、3W2,为使静态电流不超过1mA,应使3R7,3R13两端电压为0.5V,0.033V。 2)调节交流工作:第一,调节函数发生器产生频率455KHZ的标准正弦信号,接入3K1。将示波器接于V3-2。 第二,调节可调电容3C4,使输出波形幅度最大不失真。 第三,将示波器加于V3-4,调节可调电容3C7,使输出波形最大不失真。 3)测试动态范围:开关3K2断开,开关3K3闭合。调节输入信号Vi幅值,使其分别为10,20…100,200mv…1V,示波器分别接到V3-2、V3-4、V3-5,,将分别测得的波形峰峰值记入表2-2,即分别为V01,V02,Vc,同时用示波器接V3-6处记录电压值(即AGC检波输出电压)。 4)检波失真观测:第一,输入信号455KHz、10mVpp,调制1KHz信号,调制度50%调幅信号,将示波器接到V3-6处即可观察到正常无失真的波形输出并记录;第二,增大直流负载电阻3W4,观察示波器直到观测到失真波形,即为对角线失真,记录波形;第三,再次调整3W4使波形正常不失真,减小交流电阻即闭合3K4,观察示波器输出波形产生负峰切割失真,记录波形。 3、调幅接收系统: 1、晶体管混频电路:1)2K1接入调制频率1KHz正弦波,载波频率10MHz,幅度为30mVp-p ,调制度50%的调幅波信号。 2)2K3接入本振信号10.455MHz,250mVp-p的正弦信号,将示波器接在V2-3处观察波形,记录参数、波形。 2、中频放大电路3K1打至中频输入端。 3K2、3K4断开,3K3闭合,,将示波器接到V3-6观察检波输出的波形,调节3W4,使其达到最大不失真波形,记录波形。 3、测试系统性能:1)灵敏度。不断减小输入调幅波信号的幅值,同时观察检波输出波形,使示波器波形出现明显失真的输入幅值为该系统的最小可接收幅值。 四、测试指标和测试波形: 3.1.晶体管混频电路:

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

数据库实验报告1

一. 实验内容、步骤以及结果: 1.利用图形用户界面创建,备份,删除和还原数据库和数据表(30分,每小题5分) ●数据库和表的要求 (1)依据课本P127(第四版教材,下同)的第三题,创建一个名为SPJ的数据库,初始大小为 10MB,最大为50MB,数据库自动增长,增长方式是按5% 比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。数据库 的逻辑文件名和物理文件名均采用默认值。 (2)数据库SPJ包含供应商表,零件表,工程项目表,供应情况表。具体每张表的定义以及数据参看课本P74页的第五题。 ● 完成以下具体操作: (1)创建的SPJ数据库。 (2)在SPJ数据库中分别创建上述的四张表(只输入一部分数据示意即可)。 (3)备份SPJ数据库。 (4)删除已经创建的工程项目表(J表)。 (5)删除SPJ数据库。 还原刚才删除的SPJ数据库。 实验具体步骤: (1)创建SPJ数据库:右击数据库-->新建数据库-->填写相应参数-->点击确定。(2)创建表:单击数据库SPJ-->右击‘表’-->新建表-->填写参数-->确定。

(3)备份数据库:右击数据库SPJ-->任务-->备份-->填参数-->确定。 (4)删除表:单击数据库SPJ--》单击表--》右击J--》选择删除。 (5)删除数据库:右击数据库SPJ--》选择删除命令。 (6)还原数据库。右击数据库--》选择还原数据库命令--》填写参数--》确定。 2. 利用SQL语言创建和删除数据库和数据表(30分,每小题5分) 数据库和表的要求 (1)创建用于学生信息的数据库,数据库名为Student,初始大小为20MB,最大为100MB,数据库自动增长,增长方式是按10M兆字节增长;日志文件初 始为2MB,最大可增长到5MB,按1MB增长。数据库的逻辑文件名和物理文 件名,日志文件名请自定义。 (2)数据库Student包含学生信息,课程信息和学生选课的信息。包含下列3个表:S:学生基本信息表;C:课程基本信息表;SC:学生选课信息表。各表的结 构以及数据如下所示: 表 2.1 学生基本信息表(表名:S)

西工大高频第二次实验报告

实验二 调幅接收系统实验 一、实验目的与内容: 图2为实验中的调幅接收系统结构图(虚框部分为实验重点,低噪放电路下次实验实现,本振信号由信号源产生。)。通过实验了解与掌握调幅接收系统,了解与掌握三极管混频器电路、中频放大/AGC 电路、检波电路。 图2 调幅接收系统结构图 二、实验原理: 1、晶体管混频电路: 给出原理图,并分析其工作原理。 原理:混频电路将高频载波信号或已调波信号经过滤波、放大,将其频率变换为固定频率的信号且该高频滤波信号的频谱内部结构和调制类型保持不变,仅仅改变其频率。 2、中频放大/AGC 和检波电路: 给出原理图,并分析其工作原理。 检波 低噪放 混频 中放 /AGC 本振

原理:中频输入信号通过中放电路放大中频信号,抑制干扰信号,连接AGC电路实现自动增益控制,接着连接二极管检波电路和低通滤波器,从中取出调制信号。 3、调幅接收系统: 给出系统框图,并简述其工作原理。 工作原理:天线接收信号通过滤波器滤波然后低噪放放大幅度,晶体振荡器振荡出所需的本振信号,让本振信号与其进行混频然后滤波,AGC对其进行放大,输出稳定值,再进行滤波并解调检波,经过功率放大器输出。 三、实验步骤: 1、晶体管混频电路: 1)先调整静态工作点,测量2R4两端电压,调节2W1,使2R4两端电压为0; 2)在V2-5输入10.455MHz,250mV的本振信号,在V2-1输入10MHz、30mV的单载波信号,在V2-3处观测,调节2C3和2B1的大小,改变中频输出,当输出为455KHz的最大不失真稳定正弦波时,完成调试并记录此时的中频输出峰峰值。 3)改变基极偏置电阻2W1,使2R4端电压分别为0.5,1,1.5,2,2.5,3V,重复上述步骤2),记录下不同静态工作点下的中频输出的峰峰值,并计算混频增益,完成表2-1. 2、中频放大/AGC和检波电路: 1)调节直流静态工作点:闭合开关K3,电路仅接入12v直流电压,调节可调电阻3W1、3W2,为使静态电流不超过1mA,应使3R7,3R13两端电压为0.5V,0.033V。 2)调节交流工作:第一,调节函数发生器产生频率455KHZ的标准正弦信号,接入3K1。将示波器接于V3-2。 第二,调节可调电容3C4,使输出波形幅度最大不失真。 第三,将示波器加于V3-4,调节可调电容3C7,使输出波形最大不失真。 3)测试动态范围:开关3K2断开,开关3K3闭合。调节输入信号Vi幅值,使其分别为10,20…100,200mv…1V,示波器分别接到V3-2、V3-4、V3-5,,将分别测得的波形峰峰值记入表2-2,即分别为V01,V02,Vc,同时用示波器接V3-6处记录电压值(即AGC检波输出电压)。 4)检波失真观测:第一,输入信号455KHz、10mVpp,调制1KHz信号,调制度50%调幅信号,

数据库系统概论实验指导(第七版)

数据库系统概论实验指导 (第七版) 计算机学院 2013/09

改版履历

目录 目录 (3) 1.实验概要 (4) 1.1.实验说明 (4) 1.2.实验环境和配置 (4) 1.3.上机要求 (5) 2.实验1:数据库/表的基本操作和表级约束 (5) 2.1.目的和要求 (5) 2.2.实验准备 (5) 2.3.实验内容 (5) 3.实验2:库级约束和基本表的数据操作 (8) 3.1.目的和要求 (8) 3.2.实验准备 (8) 3.3.实验内容 (8) 4.实验3:视图操作和安全性控制 (10) 4.1.目的和要求 (10) 4.2.实验准备 (10) 4.3.实验内容 (10) 5.实验4:存储过程/触发器/ODBC数据库编程 (12) 5.1.目的与要求 (12) 5.2.实验准备 (12) 5.3.实验内容 (12) 6.实验5:数据库综合实验 (14) 6.1.目的与要求 (14) 6.2.实验准备 (14) 6.3.实验内容 (15) 5.3.1.题目一:零件交易中心管理系统 (15) 5.3.2.题目二:图书管理系统 (15) 5.3.3.题目三:民航订票管理系统 (15) 5.3.4.题目四:学生学籍管理系统 (16) 5.3.5.题目五:车站售票管理系统 (16) 5.3.6.题目六:企业人事管理系统 (16)

5.3.7.题目七:电话交费管理系统 (16) 5.3.8.题目八:医药销售管理系统 (17) 7.附录:实验报告格式 (18) 1.实验概要 1.1.实验说明 内容:本课程实验分5次完成,每次完成一部分。具体内容参考本指导的后半部分。 成绩:每次实验100分,最后取5次实验的加权平均分作为实验的总成绩,其中第五次实验占40%,其余各次占15%。每次实验中各个环节的评分标准如下: 上述每一项按照百分制给出分值,最后按照比率计算每次实验的最终成绩。 实验报告 每次实验需提交电子版的实验报告(最后一次实验需提交设计文档,源程序等相关资料)。每次实验结束时,将写好的实验报告,提交给各班辅导老师。如果确有困难没有完成的情况下,课后自己完成之后提交到辅导老师的邮箱里。由辅导老师根据课堂上机实验检查状况和实验报告的内容给出每次实验的成绩。 实验报告的内容包括:实验内容、实验步骤、程序源码、运行结果(可以是程序的输出,也可以是运行画面的抓屏,抓屏图片要尽可能的小,否则文件太大)。每份实验报告是一个WORD文档。实验报告命名规则如下:DBx(实验次数)_XXXXXX(学号)_姓名例如:20052978的学生的第一次实验报告文件名: DB1_20052978_李宁注意:请每个人保存好自己的实验报告的电子版,直到该门课考试成绩公布之后。 1.2.实验环境和配置 SQL Server 2008(Microsoft SQL Server 2008 Express With Advance Service)

西工大-数电实验-第二次实验-实验报告

数电实验2 一.实验目的 1.学习并掌握硬件描述语言(VHDL 或 Verilog HDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。 2.熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。 3.熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。 4.熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。 二.实验设备 1.Quartus开发环境 2.ED0开发板 三.实验内容 要求1:编写一个异或门逻辑电路,编译程序如下。 1)用 QuartusII 波形仿真验证; 2)下载到DE0 开发板验证。 要求2:编写一个将二进制码转换成 0-F 的七段码译码器。 1)用 QuartusII 波形仿真验证; 2)下载到 DE0 开发板,利用开发板上的数码管验证。 要求3:编写一个计数器。 1)用QuartusII 波形仿真验证; 2)下载到 DE0 开发板验证。 要求4:编写一个能实现占空比 50%的 5M 和50M 分频器即两个输出,输出信号频率分别为 10Hz 和 1Hz。 1)下载到 DE0 开发板验证。(提示:利用 DE0 板上已有的 50M 晶振作为输入信号,通过开发板上两个的 LED 灯观察输出信号)。 2)电路框图如下: 扩展内容:利用已经实现的 VHDL 模块文件,采用原理图方法,实现 0-F 计数自动循环显示,频率 10Hz。(提示:如何将 VHDL 模块文件在逻辑原理图中应用,参考参考内容 5) 四.实验原理 1.实验1实现异或门逻辑电路,VHDL源代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

数据库实验报告

数据库实验报告

武汉理工大学 学 生 实 验 报 告 书 实验课程名称 数据库系统概论 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 学生学号 实验课成绩

2013 — 2014 学年第二学期实验课程名称:数据库系统概论 实验项目名称SQL SEVER 2000的系 统工具及用户管理 实验 成绩 实验者专业班 级 组别 同组者实验 日期 2014年4 月24日

第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 实验目的和要求:了解SQL SEVER 2000的功能及组成,熟练掌握利用SQL SEVER 2000工具创建数据库、表、索引和修改表结构及向数据库输入数据、修改数据和删除数据的操作方法和步骤,掌握定义数据约束条件的操作。 二、实验基本原理与设计(包括实验方案设计,实 验手段的确定,试验步骤等,用硬件逻辑或者算法描述) 实验内容和步骤: (1)熟悉SQL SEVER 2000的界面和操作。 (2)创建数据库和查看数据库属性。 (3)创建表、确定表的主码和约束条件。 (4)查看和修改表的结构。 (5)向数据库输入数据,观察违反列级约束时出现的情况。 (6)修改数据。 (7)删除数据,观察违反表级约束时出现的情况。 三、主要仪器设备及耗材 Windows XP SQL SERVER 2000

第二部分:实验调试与结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录, 实验现象记录,实验过程发现的问题等) 没有错误 错误:未能建立与WORKEPLACE\XUMENGXING的链接SQL Server 不存在或访问被拒绝 原因:未启动数据库服务 二、实验结果及分析(包括结果描述、实验现象分 析、影响因素讨论、综合分析和结论等) 实验结果部分截图:

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

数据库实验报告完整

华北电力大学 实验报告 | | 实验名称数据库实验 课程名称数据库 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:2015/7/9

《数据库原理课程设计》课程设计 任务书 一、目的与要求 1.本实验是为计算机各专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力 而设置的实践环节。通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力。 为后继课程和毕业设计打下良好基础。 2.通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力。 3.通过对一个数据库系统的设计,培养学生对数据库需求分析、数据库方案设计、系统编码、界 面设计和软件调试等各方面的能力。是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。 二、主要内容 针对一个具有实际应用场景的中小型系统(见题目附录)进行数据库设计,重点分析系统涉及的实体、实体之间的联系,实现增加、删除、更新、查询数据记录等基本操作。大致分为如下步骤: 1. 理解系统的数据库需求,分析实体及实体间联系,画出E-R图: 1)分析确定实体的属性和码,完成对该实体的实体完整性、用户自定义完整性的定义。 2)设计实体之间的联系,包括联系类型和联系的属性。最后画出完整的E-R图。 2.根据设计好的E-R图及关系数据库理论知识设计数据库模式: 1)把E-R图转换为逻辑模式; 2)规范化设计。使用关系范式理论证明所设计的关系至少属于3NF并写出证明过程;如果不属于3NF则进行模式分解,直到该关系满足3NF为止,要求写出分解过程。 3)设计关系模式间的参照完整性,要求实现级联删除和级联更新。 4)用SQL语言完成数据库内模式的设计。 3.数据库权限的设计: 1)根据系统分析,完成授权操作; 2)了解学习收回权限的操作。 4.完成用户界面的设计,对重要数据进行加密。

西北工业大学自动控制原理实验报告

实验一、二 典型环节的时间特性研究 一、目的要求 1.掌握典型环节的模拟运算电路的组成原理。 2.掌握惯性环节,比例微分环节,比例积分环节,比例,微分,积分环节,振荡环节的时间特性的实验验方法和特点。 二、实验电路及运算观察、记录 1惯性环节: 其中:T=R1C ,K=R1/R0 (1)模拟电路 图 (1) 典型惯性环节模拟电路 (2)注:‘S ST ’不能用“短路套”短接 (3)安置短路套 (4)测孔联线 (5)虚拟示波器(B 3)的联接:示波器输入 端CH 1接到A6单元信号输出端OUT (U0). 注:CH 1选“X1”档。时间量程选‘X4’档 (6)运行、观察、记录 打开计算机→我的电脑→D 盘→Aedk →LABACT.exe 进入LABACT 程序。 选择自动控制菜单下的线性系统实域分析→典型环节模拟研究分析→ 开始试验,弹出示波器显示界面,按下信号发生器(B1)阶跃信号按 钮时(0→+5v 阶跃),点击开始。测完特征后点“停止”,开始读数。 用示波器观测A6输出端(Uo )的实际响应曲线(t ),且将结果记下。 改变电容C 值(即改变时间常数),加Ui ,测Uo ,并将结果记录下来和 第一次的比较。 2.比例微分环节: )1() ()(S Kp s Ui s Uo T D += 其中: ,R3很小 (1)模拟电路

图 典型比例微分环节模拟电路 (2)输入连线 a.为了避免积分饱和,将函数发生器(B5)所产生的周期性方波信号(OUT ),代替信号发生器(B1)中的阶跃输出0/5V 作为环节的信号输入(Ui )。 b.将函数发生器(B5)中的插针‘S ST ’用短路套短接。 c.将S1拨动开关置于最上档(阶跃信号)。 d.信号周期由拨动开关S2和“调宽”旋钮调节,信号幅度由“调幅”旋钮调节(正输出宽度在70ms 左右,幅度在400mV 左右)。 注:CH1选’X1’档。时间量程选’/2’档。 (6)运行,观察,记录6单元信号输出端OUT(Uo) 操作和惯性环节实验相同,用示波器观察A6输出端(Uo)的实际响应曲线Uo(t),并将结果记下来,改变参数R1值,重新测试结果,并记录比较。 3.比例积分环节 )11()()(S Kp s Ui s Uo T I += 其中,R R Kp 01= ,C R T I 11= (1) 模拟电路

编译原理实验报告一

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

数据库第一次实验报告

《数据库系统概论》实验报告 题目:实验一 数据库和表的基本操作和约束条件姓名班级学号日期 刘凯10031201 2012302606 2014.10 一、实验内容、步骤以及结果 1.利用图形用户界面创建,备份,删除和还原数据库和数据表 创建初始数据库信息如下 备份数据库

删除表 2.利用SQL语言创建和删除数据库和数据表创建数据库 CREATE DATABASE studentdata ( FILENAME = 'D:\studentdata.mdf' , SIZE = 20480KB , MAXSIZE = 102400KB , FILEGROWTH = 10240KB ) LOG ON ( FILENAME = 'D:\studentdata_1.ldf' , SIZE = 2048KB , MAXSIZE = 5120KB , FILEGROWTH = 1024KB ) GO 创建三张表

CREATE TABLE dbo.C( Cno char(4)PRIMARY KEY , Cname char(40) , Cpno int , Ccredit int,) GO CREATE TABLE dbo.S( Sno char(4)PRIMARY KEY , Sname char(40) , Ssex char(4) , Sbirth] char(40) , Sdept char(4) , ) CREATE TABLE [dbo].[SC]( Sno char(4) , Cno char(4) , Grade int ) GO 备份数据库 Backup database studentdata to disk = ‘D:\studentdata.db.bak’ 删除数据库 Deleta database studentdata.db 还原数据库 Restore database studentdata from disk = ‘D:\studentdata.db.bak’ 3.利用图形用户界面对上题中创建的Student库的S表中,增加以下的约束和索引 主键 Sname唯一键

西工大模电实验报告-晶体管单级放大器

实验一晶体管共射极单管放大器 一、实验目的 1、掌握用multisim仿真软件分析单级放大器主要性能指标的方法。 2、掌握晶体管放大器静态工作点的调试和调整方法,观察静态工作点对放大器输出波形的影响。 3、测量放大器的放大倍数、输入电阻和输出电阻。 二、实验原理 实验电路如图2.1-1所示,采用基极固定分压式偏置电路。电路在接通直 流电源V cc 而未加入信号(V i =0)时,三极管三个极电压和电流称为静态工作点, 即 图2.1-1 晶体管单级放大器 V BQ =R 2 V CC /(R 2 +R 3 +R 7 ) I CQ =I EQ =(V BQ -V BEQ) /R 4 I BQ =I EQ /β V CEQ =V CC -I CQ (R 5 +R 4 ) 1、放大器静态工作点的选择和测量 放大器的基本任务是不失真的放大小信号。为了获得最大不失真输出电压,静态工作点应选在输出特性曲线上交流负载线的中点。若工作点选的太高,则容易引起饱和失真;而选的太低,又易引起截止失真。 静态工作点的测量是指在接通电源电压后放大器输入端不加信号时,测量晶

体管的集电极电流I CQ 和管压降V CEQ 。其中V CEQ 可直接用万用表直流电压档测C-E 极间的电压既得,而I CQ 的测量则有直接法和间接法两种: (1)直接法:将万用表电流档串入集电极电路直接测量。此法精度高,但要断开集电极回路,比较麻烦。 (2)间接法:用万用表直流电压档先测出R 5上的压降,然后根据已知R 5 算出 I CQ ,此法简单,在实验中常用,但其测量精度差。为了减小测量误差,应选用内阻较高的电压表。 当按照上述要求搭好电路,在输入端引入正弦信号,用示波器观察输出。静态工作点具体的调节步骤如下: 现象 出现截止失真出现饱和失真两种失真都出 现 无失真 动作减小R 增大R 减小输入信号加大输入信号 信号,两种失真都出现,减小输入信号,两种失真同时消失,可以认为此时的静态工作点正好处于交流负载线的中点,就是最佳的静态工作点。去掉输入信号,测量此时的V CQ ,就得到了静态工作点。 2.电压放大倍数的测量 电压放大倍数是指放大器的输入电压Ui输出电压Uo之比 Au=Uo/Ui (2.1-5) 用示波器分别测出Uo和Ui,便可按式(2.1-5)求得放大倍数,电压放大倍数和负载Rl有关。 3.输入电阻和输出电阻的测量 (1)输入电阻Ri用电流电压法测得,电路如图2.1-3所示。在输入回路中串接电阻R=1kΩ,用示波器分别测出电阻两端电压Ui和Us,则可求得输入电阻Ri 为 Ri=Ui/Ri=Ui×R/(Us-Ui)(2.1-6) 图2.1-3 电阻R不宜过大,否则引入干扰;也不宜过小,否则误差太大。通常取和Ri同一数量级。 (2)输出电阻Ro可通过测量输出端开路时的输出电压Uo1,带上负载Rl后的

编译原理实验报告

《编译原理》实验报告软件131 陈万全132852

一、需求分析 通过对一个常用高级程序设计语言的简单语言子集编译系统中词法分析、语法分析、语义处理模块的设计、开发,掌握实际编译系统的核心结构、工作流程及其实现技术,获得分析、设计、实现编译程序等方面的实际操作能力,增强设计、编写和调试程序的能力。 通过开源编译器分析、编译过程可视化等扩展实验,促进学生增强复杂系统分析、设计和实现能力,鼓励学生创新意识和能力。 1、词法分析程序设计与实现 假定一种高级程序设计语言中的单词主要包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符和四个算术运算符,试构造能识别这些单词的词法分析程序。 输入:由符合和不符合所规定的单词类别结构的各类单词组成的源程序文件。 输出:把所识别出的每一单词均按形如(CLASS,VALUE)的二元式形式输出,并将结果放到某个文件中。对于标识符和无符号常数,CLASS字段为相应的类别码的助记符;VALUE字段则是该标识符、常数的具体值;对于关键字和运算符,采用一词一类的编码形式,仅需在二元式的CLASS字段上放置相应单词的类别码的助记符,VALUE字段则为“空”。 2、语法分析程序设计与实现 选择对各种常见高级程序设计语言都较为通用的语法结构——算术表达式的

一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表达式>],任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。 G2[<算术表达式>]: <算术表达式>→<项> | <算术表达式>+<项> | <算术表达式>-<项> <项>→<因式>|<项>*<因式>|<项>/<因式> <因式>→<运算对象> | (<算术表达式>) 若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i 代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID······输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 3、语义分析程序设计与实现 对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。 输入:包含测试用例(由标识符、无符号数和+、?、*、/、(、)构成的算术表达式)的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。 若源程序中有错误,应指出错误信息 二、设计思路 1、词法分析程序设计与实现 1)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

相关主题
文本预览
相关文档 最新文档