文档库 最新最全的文档下载
当前位置:文档库 › PL0+语言编译器分析实验

PL0+语言编译器分析实验

PL0+语言编译器分析实验
PL0+语言编译器分析实验

编译原理实验报告

课题名称:PL/0 语言编译器分析实验

学院:

专业:

姓名:

学号:

指导老师:

完成时间:

一、实验目的

通过阅读与解析一个实际编译器(PL/0语言编译器)的源代码,加深对编译阶段(包括词法分析、语法分析、语义分析、中间代码生成等)和编译系统软件结构的理解,并达到提高学生学习兴趣的目的。

二、实验要求

(1)要求掌握基本的程序设计技巧(C语言)和阅读较大规模程序源代码的能力;

(2)理解并掌握编译过程的逻辑阶段及各逻辑阶段的功能;

(3)要求能把握整个系统(PL/0语言编译器)的体系结构,各功能模块的功能,各模块之间的接口;

(4)要求能总结出实现编译过程各逻辑阶段功能采用的具体算法与技术。

三、实验原理

四、实验报告

pl/0语言是pascal语言的一个子集,我们这里分析的pl/0的编译程序包括了对pl/0语言源程序进行分析处理、编译生成类pcode代码,并在虚拟机上解释运行生成的类pcode代码的功能。

pl/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和代码生成作为独立的子程序供语法分析程序调用。语法分析的同时,提供了出

错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类pcode 解释程序解释执行生成的类pcode代码。

词法分析子程序分析:

词法分析子程序名为getsym,功能是从源程序中读出一个单词符号(token),把它的信息放入全局变量sym、id和num中,语法分析器需要单词时,直接从这三个变量中获得。(注意!语法分析器每次用完这三个变量的值就立即调用getsym 子程序获取新的单词供下一次使用。而不是在需要新单词时才调用getsym过程。)getsym过程通过反复调用getch子过程从源程序过获取字符,并把它们拼成单词。getch过程中使用了行缓冲区技术以提高程序运行效率。

词法分析器的分析过程:

调用getsym时,它通过getch过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把sym变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把sym 置为ident,把这个单词存入id变量。查保留字表时使用了二分法查找以提高效率。如果getch获得的字符是数字,则继续用getch获取数字,并把它们拼成一个整数,然后把sym置为number,并把拼成的数值放入num变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把sym则成相应的类型。如果遇到不合法的字符,把sym置成nul。

语法分析子程序分析:

语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。语法分析主要由分程序分析过程(block)、常量定义分析过程(constdeclaration)、变量定义分析过程(vardeclaration)、语句分析过程(statement)、表达式处理过程(expression)、项处理过程(term)、因子处理过程(factor)和条件处理过程(condition)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(error)、代码生成过程(gen)、测试单词合法性及出错恢复过程(test)、登录名字表过程(enter)、查询名字表函数(position)以及列出类pcode代码过程(listcode)作过语法分析的辅助过程。

由pl/0的语法图可知:一个完整的pl/0程序是由分程序和句号构成的。因此,本编译程序在运行的时候,通过主程序中调用分程序处理过程block来分析分程序部分(分程序分析过程中还可能会递归调用block过程),然后,判断最后读入的符号是否为句号。如果是句号且分程序分析中未出错,则是一个合法的pl/0程序,可以运行生成的代码,否则就说明源pl/0程序是不合法的,输出出错提示即可。

语法单元分析:

1、分程序处理过程:

语法分析开始后,首先调用分程序处理过程(block)处理分程序。过程入口参数置为:0层、符号表位置0、出错恢复单词集合为句号、声明符或语句开始符。进入block过程后,首先把局部数据段分配指针设为3,准备分配3个单元供

运行期存放静态链sl、动态链dl和返回地址ra。然后用tx0记录下当前符号表位置并产生一条jmp指令,准备跳转到主程序的开始位置,由于当前还没有知到主程序究竟在何处开始,所以jmp的目标暂时填为0,稍后再改。同时在符号表的当前位置记录下这个jmp指令在代码段中的位置。在判断了嵌套层数没有超过规定的层数后,开始分析源程序。首先判断是否遇到了常量声明,如果遇到则开始常量定义,把常量存入符号表。接下去用同样的方法分析变量声明,变量定义过程中会用dx变量记录下局部数据段分配的空间个数。然后如果遇到procedure保留字则进行过程声明和定义,声明的方法是把过程的名字和所在的层次记入符号表,过程定义的方法就是通过递归调用block过程,因为每个过程都是一个分程序。由于这是分程序中的分程序,因此调用block时需把当前的层次号lev加一传递给block过程。分程序声明部分完成后,即将进入语句的处理,这时的代码分配指针cx的值正好指向语句的开始位置,这个位置正是前面的jmp指令需要跳转到的位置。于是通过前面记录下来的地址值,把这个jmp指令的跳转位置改成当前cx的位置。并在符号表中记录下当前的代码段分配地址和局部数据段要分配的大小(dx的值)。生成一条int指令,分配dx个空间,作为这个分程序段的第一条指令。下面就调用语句处理过程statement分析语句。分析完成后,生成操作数为0的opr指令,用于从分程序返回(对于0层的主程序来说,就是程序运行完成,退出)。

2、常量定义过程:

通过循环,反复获得标识符和对应的值,存入符号表。符号表中记录下标识符的名字和它对应的值。

3、变量定义过程:

与常量定义类似,通过循环,反复获得标识符,存入符号表。符号表中记录下标识符的名字、它所在的层及它在所在层中的偏移地址。

4、语句处理过程:

语句处理过程是一个嵌套子程序,通过调用表达式处理、项处理、因子处理等过程及递归调用自己来实现对语句的分析。语句处理过程可以识别的语句包括赋值语句、read语句、write语句、call语句、if语句、while语句。当遇到begin/end 语句时,就递归调用自己来分析。分析的同时生成相应的类pcode指令。

5、赋值语句的处理:

首先获取赋值号左边的标识符,从符号表中找到它的信息,并确认这个标识符确为变量名。然后通过调用表达式处理过程算得赋值号右部的表达式的值并生成相应的指令保证这个值放在运行期的数据栈顶。最后通过前面查到的左部变量的位置信息,生成相应的sto指令,把栈顶值存入指定的变量的空间,实现了赋值操作。

6、read语句的处理:

确定read语句语法合理的前提下(否则报错),生成相应的指令:第一条是16号操作的opr指令,实现从标准输入设备上读一个整数值,放在数据栈顶。第二条是sto指令,把栈顶的值存入read语句括号中的变量所在的单元。

7、write语句的处理:

与read语句相似。在语法正确的前提下,生成指令:通过循环调用表达式处理过程分析write语句括号中的每一个表达式,生成相应指令保证把表达式的值算出并放到数据栈顶并生成14号操作的opr指令,输出表达式的值。最后生成15号操作的opr指令输出一个换行。

8、call语句的处理:

从符号表中找到call语句右部的标识符,获得其所在层次和偏移地址。然后生成相应的cal指令。至于调用子过程所需的保护现场等工作是由类pcode解释程序在解释执行cal指令时自动完成的。

9、if语句的处理:

按if语句的语法,首先调用逻辑表达式处理过程处理if语句的条件,把相应的真假值放到数据栈顶。接下去记录下代码段分配位置(即下面生成的jpc指令的位置),然后生成条件转移jpc指令(遇0或遇假转移),转移地址未知暂时填0。然后调用语句处理过程处理then语句后面的语句或语句块。then后的语句处理完后,当前代码段分配指针的位置就应该是上面的jpc指令的转移位置。通过前面记录下的jpc指令的位置,把它的跳转位置改成当前的代码段指针位置。

10、begin/end语句的处理:

通过循环遍历begin/end语句块中的每一个语句,通过递归调用语句分析过程分析并生成相应代码。

11、while语句的处理:

首先用cx1变量记下当前代码段分配位置,作为循环的开始位置。然后处理while语句中的条件表达式生成相应代码把结果放在数据栈顶,再用cx2变量记下当前位置,生成条件转移指令,转移位置未知,填0。通过递归调用语句分析过程分析do语句后的语句或语句块并生成相应代码。最后生成一条无条件跳转指令jmp,跳转到cx1所指位置,并把cx2所指的条件跳转指令的跳转位置改成当前代码段分配位置。

12、表达式、项、因子处理:

根据pl/0语法可知,表达式应该是由正负号或无符号开头、由若干个项以加减号连接而成。而项是由若干个因子以乘除号连接而成,因子则可能是一个标识符或一个数字,或是一个以括号括起来的子表达式。根据这样的结构,构造出相应的过程,递归调用就完成了表达式的处理。把项和因子独立开处理解决了加减号与乘除号的优先级问题。在这几个过程的反复调用中,始终传递fsys变量的值,保证可以在出错的情况下跳过出错的符号,使分析过程得以进行下去。

13、逻辑表达式的处理:

首先判断是否为一元逻辑表达式:判奇偶。如果是,则通过调用表达式处理过程分析计算表达式的值,然后生成判奇指令。如果不是,则肯定是二元逻辑运算符,通过调用表达式处理过程依次分析运算符左右两部分的值,放在栈顶的两个空间中,然后依不同的逻辑运算符,生成相应的逻辑判断指令,放入代码段。

14、判断单词合法性与出错恢复过程分析:

本过程有三个参数,s1、s2为两个符号集合,n为出错代码。本过程的功能是:测试当前符号(即sym变量中的值)是否在s1集合中,如果不在,就通过调用出错报告过程输出出错代码n,并放弃当前符号,通过词法分析过程获取一下单词,直到这个单词出现在s1或s2集合中为止。

这个过程在实际使用中很灵活,主要有两个用法:

在进入某个语法单位时,调用本过程,检查当前符号是否属于该语法单位的开始符号集合。若不属于,则滤去开始符号和后继符号集合外的所有符号。

在语法单位分析结束时,调用本过程,检查当前符号是否属于调用该语法单位时应有的后继符号集合。若不属于,则滤去后继符号和开始符号集合外的所有符号。

通过这样的机制,可以在源程序出现错误时,及时跳过出错的部分,保证语法分析可以继续下去。

15、类pcode代码解释执行过程分析:

这个过程模拟了一台可以运行类pcode指令的栈式计算机。它拥有一个栈式数据段用于存放运行期数据、拥有一个代码段用于存放类pcode程序代码。同时还拥用数据段分配指针、指令指针、指令寄存器、局部段基址指针等寄存器。

16、解释执行类pcode代码时,数据段存储分配方式:

对于源程序的每一个过程(包括主程序),在被调用时,首先在数据段中开辟三个空间,存放静态链sl、动态链dl和返回地址ra。静态链记录了定义该过程的直接外过程(或主程序)运行时最新数据段的基地址。动态链记录调用该过程前正在运行的过程的数据段基址。返回地址记录了调用该过程时程序运行的断点位置。对于主程序来说,sl、dl和ra的值均置为0。静态链的功能是在一个子过程要引用它的直接或间接父过程(这里的父过程是按定义过程时的嵌套情况来定的,而不是按执行时的调用顺序定的)的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。

在过程返回时,解释程序通过返回地址恢复指令指针的值到调用前的地址,通过当前段基址恢复数据段分配指针,通过动态链恢复局部段基址指针。实现子过程的返回。对于主程序来说,解释程序会遇到返回地址为0的情况,这时就认为程序运行结束。

解释程序过程中的base函数的功能,就是用于沿着静态链,向前查找相差指定层数的局部数据段基址。这在使用sto、lod等访问局部变量的指令中会经常用到。

类pcode代码解释执行的部分通过循环和简单的case判断不同的指令,做出相应的动作。当遇到主程序中的返回指令时,指令指针会指到0位置,把这样一个条件作为终至循环的条件,保证程序运行可以正常的结束。

传感器实验报告.doc

实验一金属箔式应变片性能—单臂电桥 1、实验目的了解金属箔式应变片,单臂单桥的工作原理和工作情况。 2、实验方法在CSY-998传感器实验仪上验证应变片单臂单桥的工作原理 3、实验仪器CSY-998传感器实验仪 4、实验操作方法 所需单元及部件:直流稳压电源、电桥、差动放大器、双孔悬臂梁称重传感器、砝码、一片应变片、F/V表、主、副电源。 旋钮初始位置:直流稳压电源打倒±2V档,F/V表打到2V档,差动放大增益最大。 实验步骤: (1)了解所需单元、部件在实验仪上的所在位置,观察梁上的应变片,应变片为棕色衬底箔式结构小方薄片。上下二片梁的外表面各贴二片受力应变片。 (2)将差动放大器调零:用连线将差动放大器的正(+)、负(-)、地短接。将差动放大器的输出端与F/V表的输入插口Vi 相连;开启主、副电源;调节差动放大器的增益到最大位置,然后调整差动放大器的调零旋钮使F/V表显示为零,关闭主、副电源。 (3)根据图1接线R1、R2、R3为电桥单元的固定电阻。R4为应变片;将稳压电源的切换开关置±4V 档,F/V表置20V档。开启主、副电源,调节电桥平衡网络中的W1,使F/V表显示为零,等待数分钟后将F/V表置2V档,再调电桥W1(慢慢地调),使F/V表显示为零。 (4) 将测微头转动到10㎜刻度附近,安装到双平行梁的右端即自由端(与自由端磁钢吸合),调节测微头支柱的高度(梁的自由端跟随变化)使V/F表显示值最小,再旋动测微头,使V/F表显示为零(细调零),这时的测微头刻度为零位的相应刻度。 (5) 往下或往上旋动测微头,使梁的自由端产生位移记下V/F表显示的值,每旋动测微头一周即 压值的相应变化。

2020-Linux文版-实验3-Vi编辑器的使用及C编程-学生实验报告模板-P

实验报告 课程名称: Linux操作系统 实验名称:实验3 Vi编辑器的使用及C编程 学生姓名:孙文浩班级计算机 141 学号 学院(系):信息数理学院指导教师:庄丽华 实验时间: 2016 年 9 月 30 日实验成绩: 实验3 Vi编辑器的使用及C编程 一、实验要求 (1)掌握Vi的三种运行模式及切换方法; (2)掌握使用Vi的各种操作命令进行文本文件的编辑; (3)用Vi编写Linux下C程序,掌握gcc编译。 二、实验内容和实验步骤 1、vi编辑器的使用 【操作要求1】首先用合法用户名登陆系统,不保存直接退出。 【操作步骤】 (1)在系统提示符下,输入vi,按回车键,进入vi的界面。 (2)输入:q!不保存直接退出。 【操作要求2】新建文件f1并编辑一段文字进行保存。 【操作步骤】 (1)在系统提示符下输入vi f1,按回车键。 (2)看到vi的界面,输入i,左下角会出现“插入”。 (3)输入一段文字。 10 Basic Linux Networking and Monitoring Commands You Should Know I have listed down 10 basic Linux networking and monitoring commands which each Linux user should know. These Linux basic networking and monitoring commands like hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool are used for viewing the IP address of the Linux server, managing Linux server network adapter configuration, making network connections among Linux servers over telnet and

电磁场HFSS实验报告

实验一? T形波导的内场分析 实验目的? 1、?熟悉并掌握HFSS的工作界面、操作步骤及工作流程。????? 2、?掌握T型波导功分器的设计方法、优化设计方法和工作原理。?实验仪器 1、装有windows 系统的PC 一台 2、或更高版本软件 3、截图软件 实验原理 本实验所要分析的器件是下图所示的一个带有隔片的T形波导。其中,波导的端口1是信号输入端口,端口2和端口3是信号输出端口。正对着端口1一侧的波导壁凹进去一块,相当于在此处放置一个金属隔片。通过调节隔片的位置可以调节在端口1传输到端口2,从端口1传输到端口3的信号能量大小,以及反射回端口1的信号能量大小。 T形波导 实验步骤 1、新建工程设置: 运行HFSS并新建工程:打开 HFSS 软件后,自动创建一个新工程: Project1,由主菜单选 File\Save as ,保存在指定的文件夹内,命名为Ex1_Tee;由主菜单选 Project\ Insert HFSS Design,

在工程树中选择 HFSSModel1,点右键,选择 Rename项,将设计命名为 TeeModel。 选择求解类型为模式驱动(Driven Model):由主菜单选HFSS\Solution Type ,在弹出对话窗选择Driven Model 项。 设置长度单位为in:由主菜单选 3D Modeler\Units ,在 Set Model Units 对话框中选中 in 项。。 2、创建T形波导模型: 创建长方形模型:在 Draw 菜单中,点击 Box 选项,在Command 页输入尺寸参数以及重命名;在Attribute页我们可以为长方体设置名称、材料、颜色、透明度等参数Transparent(透明度)将其设为。Material(材料)保持为Vacuum。 设置波端口源励:选中长方体平行于 yz 面、x=2 的平面;单击右键,选择 Assign Excitation\Wave port项,弹出 Wave Port界面,输入名称WavePort1;点击积分线 (Integration Line) 下的 New line ,则提示绘制端口,在绘图区该面的下边缘中部即(2,0,0)处点左键,确定端口起始点,再选上边缘中部即(2,0,处,作为端口终点。 复制长方体:展开绘图历史树的 Model\Vacuum\Tee节点,右键点击Tee项,选择 Edit\Duplicate\Around Axis,在弹出对话窗的Axis项选择Z,在Angel项输入90deg,在 Total Number 项输入2,点OK,则复制、添加一个长方体,默认名为TEE_1。重复以上步骤,在Angel项输入-90,则添加第3个长方体,默认名Tee_2.

(完整版)高级语言与编译程序概述自测题

第一章高级语言与编译程序概述 一、单项选择题 1.将编译程序分成若干个“遍”是为了____。 A. 提高程序的执行效率 B. 使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D. 利用有限的机器内存但降低了机器的执行效率 2.构造编译程序应掌握____。 A. 源程序 B. 目标语言 C. 编译方法 D. 以上三项都是 3.编译程序绝大多数时间花在____上。 A. 出错处理 B. 词法分析 C. 目标代码生成 D. 管理表格 4. ____不可能是目标代码。 A. 汇编指令代码 B. 可重定位指令代码 C. 绝对指令代码 D. 中间代码 5.使用____可以定义一个程序的意义。 A. 语义规则 B. 词法规则 C. 产生规则 D. 左结合规则 6.词法分析器的输入是____。 A. 单词符号 B. 源程序 C. 语法单位 D. 目标程序 7.中间代码生成时所遵循的是____。 A. 语法规则 B. 词法规则 C. 语义规则 D. 等价变换规则 8.编译程序是对____。 A. 汇编程序的翻译 B. 高级语言程序的解释执行 C. 机器语言的执行 D. 高级语言的翻译 9.词法分析应遵循____。 A. 语义规则 B. 语法规则 C. 构词规则 D. 等价变换规则 10.若源程序是高级语言编写的程序,目标程序是____,则称它为编译程序。 A. 汇编语言程序或高级语言程序 B. 高级语言程序或机器语言程序 C. 汇编语言程序或机器语言程序 D. 连接程序或运行程序 11.编译过程中,词法分析阶段的任务是____。 A.识别表达式 B. 识别语言单词 C. 识别语句 D. 识别程序 二、多项选择题: 1.编译程序各阶段的工作都涉及到____。 A. 语法分析 B. 表格管理 C. 出错处理 D. 语义分析 E. 词法分析 2.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:____和____。 A. 编译阶段 B. 汇编阶段 C. 运行阶段 D. 置初值阶段 3.编译程序工作时, 通常有____阶段。 A.词法分析 B. 语法分析 C. 中间代码生成 D. 语义检查 E. 目标代码生成 F.出错处理 G.表格管理 4.编译过程中所遵循的规则有____。 A.等价变换规则 B. 短语规则 C. 构词规则 D. 语义规则 E. 语法规则 三、填空题: 1.解释程序和编译程序的区别在于________。 2.编译过程通常可分为5 个阶段,分别是____、语法分析、____、代码优化和目标代码生成。

霍尔传感器制作实训报告

佛山职业技术学院 实训报告 课程名称传感器及应用 报告内容霍尔传感器制作与调试 专业电气自动化技术 班级08152 姓名陈红杰‘’‘’‘’‘’‘’‘’‘’‘ 学号31 二0一0年六月 佛山职业技术学院

《传感器及应用》 霍尔传感器制作实训报告 班级08152学号31 姓名陈红杰时间2009-2010第二学期项目名称霍尔传感器电路制作与 指导老师张教雄谢应然调试 一、实验目的与要求: 1.对霍尔传感器的实物(电路部分)进行一个基本的了解。 2.了解双层PCB板以及一定(霍尔传感器)的焊接排版的技术和工艺。 二、实验仪器、设备与材料: 1.认识霍尔传感器(电路部分)的元件(附图如下): 2.焊接电路PCB板(双层)和对电路设计的排版工艺的了解。 3.对霍尔传感器的电路原理图进行基本的分析(附图如下):

实验开始,每组会得到分发的元件,我先由霍尔传感器的电路原理图开始分析,将每个元件插放好位置,这点很重要,如果出了问题那么会使电路不能正常工作,严重的还有可能导致电路元件受损而无法恢复。所以我先由霍尔传感器的电路原理图开始着手,分析清楚每个元件的指定位置,插放好了之后再由焊接,最后要把多余的脚剪掉。 整个电路的元件除了THS119是长脚直插式元件之外,其余的元件均为低位直插或者贴板直插。 焊接的过程中,所需要注意的事情就是不能出现虚焊脱焊或者更严重的烙铁烫坏元件的表壳封装损坏印制电路板等。这些都是在焊接的整个过程中要注意的事情。 比如,焊接三端稳压管7812时,要考虑到电路板的外壳封装和三端稳压管7812的散热问题,如果直插焊接的话那么就会放不进塑料外壳里,还有直插没有折引脚的话对三端稳压管7812的散热影响很大。综合这些因素再去插放焊接元件,效果会好很多。 又比如,焊接THS119的时,原本PCB板在设计的时已经排好版了,就是在TL082的背面插放THS119。这样的设计很巧妙,能够保证每一个THS119插进去焊接完了之后都能很好地与塑料外壳严密配合安放进去。因为这是利用了IC引脚与PCB板的间距来实现定距离的,绝不会给焊接带来任何麻烦。 最后,顺便提及一下,在保证能将每一个元件正确地焊接在印制电路板上的前提条件下要尽量将元件插放焊接得美观。 五、实验心得体会 (1)首先,从整个霍尔传感器来看,设计的电路的合理性,元件的选用,还有焊接的制作工艺是保证整个电路能正常工作前提。 (2)在学习电子电路的过程中,急需有一个过度期,焊接霍尔传感器电路的过程当中就会得到一个这样的练习。 (3)简单的说就是,拿到一张电路原理图未必做得出一个比较好的产品,这里需要对整个电路设计的元件参数的考虑和排版,元件插放等等。只有将这些问题逐一解决了,才能做好一个电路,也只有这样才能做好一个产品。 (4)霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低。霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。若使霍尔集成电路起传感作用,需要用机械的方法来改变磁场强度。 六、实验收获 从拿到第一个元件开始,我仍然没有太多的收获,直到开始分析整个电路原理图的时候才慢慢开始了解到一些确实精巧的设计,可以说是独具匠心,到整个霍尔传感器电路完成之后才算是明白了一二。 在此,我具体地说说。首先,为什么不用一个普通的稳压管替代Z2这个精密稳压集成电路TL431呢?我查阅相关资料知道它的温度范围宽能在 区间工作。将其的R、C脚并焊再串上一个电阻来等效代替电

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

PL0语言编译器的中间代码生成

课程设计报告 ( 2016--2017年度第一学期) 名称:编译技术课程设计 题目:PL/0语言编译器的中间代码生成院系:控制与计算机工程 班级:信安1401 学号:1141290105 学生姓名:黄竞昶 指导教师:徐欢 设计周数:一周 成绩: 日期:2016年12 月29日

1 课程设计的目的和要求 1.1 课程设计的目的 本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。 1.2 课程设计的要求 1、要求用递归子程序法/或预测分析法实现对表达式、各种说明语句、控制语句进行语法分析。 2、若语法正确,则用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间代码并填写到三地址码表中; 3、若语法错误,要求指出出错性质和出错位置(行号)。出错处理应设计成一个出错处理子程序。 2 系统描述 PL/0的编译程序和目标程序的解释执行程序都是用JA V A语言书写的,因此PL/0语言可在配备JA V A语言的任何机器上实现。本次课设开发平台即为JA V A。用递归子程序法实现了对表达式、各种说明语句、控制语句进行语法的分析。其中,对各个变量符号保存到了符号表中。对可执行语句,转化成四元式中间代码进行输出。本程序中,通过出错处理子程序,也进行了语法的错误的记录,并且输出了出错的行号和出错原因。 该程序的输入是打开test文件,通过文件输入流读入,输出有生成的中间代码、符号表内容、错误分析三部分内容,分别用java界面控件显示出来。 2.1 文法的描述 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也是文法的另一种形式。 PL/0文法的EBNF表示: <程序>::= <分程序>. <分程序>::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分>::= const<常量定义>{,<常量定义>};

传感器实训心得体会.doc

传感器实训心得体会 篇一:传感器实训心得 实训报告 学了一学期的传感器实训心得体会)传感器,在最后期末的时候我们也参加了传感器这一学科的实训,收获还是颇多。 在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验后,才知道其实并不容易做,但学到的知识与难度成正比,使我们受益匪浅.做实验时,最重要的是一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,这样,也会有事半功倍的效果。 实验就是使我们加深理解所学基础知识,掌握各类典型传感器、记录仪器的基本原理和适用范围;具有测试系统的选择及应用能力;具有实验数据处理和误差分析能力;得到基本实验技能的训练与分析能力的训练,使我们初步掌握测试技术的基本方法,具有初步独立进行机械工程测试的能力,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。更重要的是能够提高我们的动手能力。 这次实习的却让我加深了对各种传感器的了解和它们各自的原理,而且还培养我们分析和解决实际问题的能力。 在做实验的时候,连接电路是必须有的程序,也是最重要的,而连接电路时最重要的就是细心。我们俩最开始做实验的时候,并没有多注意,还是比较细心,但当我们把电路连接好通电后发现我们并不能得到数据,不管怎么调节都不对,后来才知道是我们电路连接错了,然

后我们心里也难免有点失落,因为毕竟是辛辛苦苦连了这么久的电路居然是错了,最后我们就只有在认真检查一次,看错啊你处在哪里。有了这次的经验下次就更加细心了。以上就是我们组两人对这次实训最大的感触,下次实训虽然不是一样的学科,但实验中的经验和感受或许会有相似的,我们会将这次的经验用到下次,经验不断积累就是我们实训最大的收获。 篇二:传感器实训报告 上海第二工业大学 传感器与测试技术技能实习 专业:机械电子工程 班级:10机工A2 姓名: 学号: 指导老师:杨淑珍 日期:2013年6月24日~7月7日 项目五:转子台转速测量及振动监控系统。 (一)内容 设计一个转子台的振动检测系统,能实时测量转子台工作时的振动信号(振幅)并实时显示转速,当振幅超过规定值时,报警。具体要求: 1.能测量振动信号并显示波形,若振动超过限值,报警(软硬件报警); 2.能测量并显示转子的转速; 3.限值均由用户可设定(最好以对话框方式设置,软件重新打开后,能记住上次的设置结果);

java文本编辑器实验报告

Java考核 课程名称Java程序设计 题目名称文本编辑器的设计与实现学生学院计算机学院 专业班级计算机17(2)班 学号3117004479 学生姓名李泽豪 指导教师赵锐 2018 年12 月11 日

一、课程题目 编程实现一个文本编辑器 使其具有新建、打开、保存,编辑(查找、替换、大小写转换等)、统计(字数、行数、字符数等)、格式(字体设置、字体大小、字体颜色、背景颜色等)等功能。 要求:基于JFrame窗体设计、使用菜单进行功能选择。 提示:字体颜色,背景颜色的设置,可使用javax.swing包中的JColorChooser类的静态方法showDialog()调用标准颜色对话框来完成;文件操作可通过javax.swing包中JColorChooser类中的showSaveDialog()、showOpenDialog()方法调用标准的的文件对话框来完成。 二、题目分析与设计 2.1开发环境 使用Eclipse开发软件 2.2需求分析 简单的文本编辑器提供给用户基本纯文本的文字编辑功能,能够读取计算机本地磁盘中的文本内容,将用户文本导入到磁盘中之中,以及实现基本的字体设置(字体,字号,字体颜色)简单的编辑字体的功能,以及统计(字数,行数,字符数),增强视觉体验的背景颜色功能等,简单而实用。而网络上的各种编辑器,有的功能不足(如自带的记事本),而有些编辑器功能太繁杂,仅以日常应用方面来说,一个文本编辑器只需要简单的功能就够了。 2.3功能构架 本程序要构建的文本编辑器按照题目要求,分为四个方面: (1)“文件”菜单:包括“新建”并提示是否保存已编辑内容,“打开”计算机本地磁盘的文本文件,主动“保存”自己已经编辑好的内容到电脑的磁盘或“另存为”新的文件之中,以及“退出”并提示是否保存已编辑的内容。 (2)“编辑”菜单:包括对已编辑文本的一个“查找与替换”功能,对已编辑英文文本的一个“大小写转换”功能。 (3)“格式”菜单:实现对文本的“字体”设置,“字体大小”以及“字体颜色”,还有

T型功分器的设计与仿真.

T型功分器的设计与仿真 1.改进型威尔金森功分器的工作原理 功率分配器属于无源微波器件,它的作用是将一个输入信号分成两个(或多个)较小功率的信号,工程上常用的功分器有T型结和威尔金森功分器。 威尔金森功分器是最常用的一种功率分配器。图1所示的为标准的二路威尔 金森等功率分配器。从合路端口输入的射频信号被分成幅度和相位都相等的两路信号,分别经过传输线Bl和BZ,到达隔离电阻两端,然后从两个分路端口输出,离电阻R两端的信号幅度和相位都相等,R上不存在差模信号,所以它不会消耗功率,如果我们不考虑传输线的损耗,则每路分路端口将输出二分之一功率的信号。 图1威尔金森功分器 但是这种经典威尔金森等功率分配器有几个缺点: 1、大功率应用的时候,要求隔离电阻的耗散功率大因此电阻的体积也会比较大 2、如果功分器应用于较高的频段,波长就会与大功率电阻的尺寸相比拟,这样就需要考虑电阻的分布参数。 3、为了提高功分器性能,就要尽量减小Bl和BZ这两段传输线之间的藕合,因此在实际设计时,要求四分之一波长传输线Bl、BZ之间的距离较大,在低频应用时,由于四分之一波长较长,占用面积还是太大了,此外,四分之一波长传输线Bl、BZ的阻抗较高,因此线宽较细,制板的相对误差更大[24]。为克服这些缺点,本文采用了一种改进型的威尔金森等功率分配器,如图2所示

图2 改进型威尔金森功分器 可以看到,它仅由四段传输线组成,没有隔离电阻。传输线A 、Cl 、CZ 的特 征阻抗均为Z0。传输线B 位于A 和Cl 、CZ 之间,它的电长度为四分之一波长, 特征阻抗为Z0/2。从合路端输入的信号,通过传输线B ,被分成幅度和相位相等的的两路信号,分别经过传输线Cl 和C2到达分路端口一和二,在整个结构中,传输线B 起到了阻抗变换的作用。从传输线A 、B 相接处向左看,输入阻抗为Z0。从传输线B 与C1、C2相接处向右看,输入阻抗为Z0/2。利用四分之一阻抗变换器的原理我们知道,传输线的特征阻抗为2/00Z Z ?,即Z0/2。因此,整个电路处于功率分配与合成时,在中心频点处,三个端口都能匹配良好,没有反射。这种改进型的结构克服了标准威尔金森功分器的一系列缺点,同时由于省略了隔离电阻,所以成本降低,也不存在电阻分布参数的问题,与传统威尔金森功分器相比,减少了一段四分之一波长传输线,另外,构成变换器的四分之一波长传输线B 的特征阻抗较低,线宽较宽,能有效降低制板误差。 2功分器的设计与仿真 通过前面的分析,我们知道改进型威尔金森功分器四段传输线特征阻抗之间 的比例关系。由此可得,传输线A 、C1和C2的特征阻抗均为50Ω,而传输线B 的特征阻抗为352/0=Z Ω 为了实现右旋圆极化,经过C2输出的信号要比经过Cl 的相位超前?90,即Cl 要比C2长λ4/1g (λg 为中心频率所对应的介质波长)。设计的功率分配器 如图3所示,传输线段B 的长度约为λ4/1g ,起阻抗变换的作用。传输线段

传感器实验报告

传感器实验报告(二) 自动化1204班蔡华轩 U2 吴昊 U5 实验七: 一、实验目的:了解电容式传感器结构及其特点。 二、基本原理:利用平板电容C=εA/d 和其它结构的关系式通过相应的结 构和测量电路可以选择ε、A、d 中三个参数中,保持二个参数不变,而只改变其中一个参数,则可以有测谷物干燥度(ε变)测微小位移(变d)和测量液位(变A)等多种电容传感器。 三、需用器件与单元:电容传感器、电容传感器实验模板、测微头、相敏 检波、滤波模板、数显单元、直流稳压源。 四、实验步骤: 1、按图6-4 安装示意图将电容传感器装于电容传感器实验模板上。 2、将电容传感器连线插入电容传感器实验模板,实验线路见图7-1。图 7-1 电容传感器位移实验接线图 3、将电容传感器实验模板的输出端V01 与数显表单元Vi 相接(插入主控 箱Vi 孔),Rw 调节到中间位置。 4、接入±15V 电源,旋动测微头推进电容传感器动极板位置,每间隔 记下位移X 与输出电压值,填入表7-1。

5、根据表7-1 数据计算电容传感器的系统灵敏度S 和非线性误差δf。 图(7-1) 五、思考题: 试设计利用ε的变化测谷物湿度的传感器原理及结构,并叙述一 下在此设计中应考虑哪些因素 答:原理:通过湿度对介电常数的影响从而影响电容的大小通过电压表现出来,建立起电压变化与湿度的关系从而起到湿度传感器的作用;结构:与电容传感器的结构答大体相同不同之处在于电容面板的面积应适当增大使测量灵敏度更好;设计时应考虑的因素还应包括测量误差,温度对测量的影响等

六:实验数据处理 由excle处理后得图线可知:系统灵敏度S= 非线性误差δf=353=% 实验八直流激励时霍尔式传感器位移特性实验 一、实验目的:了解霍尔式传感器原理与应用。 二、基本原理:霍尔式传感器是一种磁敏传感器,基于霍尔效应原理工作。 它将被测量的磁场变化(或以磁场为媒体)转换成电动势输出。 根据霍尔效应,霍尔电势UH=KHIB,当霍尔元件处在梯度磁场中 运动时,它就可以进行位移测量。图8-1 霍尔效应原理

文本编辑器c++实验报告附源代码

四川大学软件学院 实验报告 课程名称数据结构实验课时8 实验项目文本编辑器实验时间12到14周实验目的了解c++类的封装和KMP算法。 实验环境 Windows平台 VC6.0++ 实验内容(算法、程序、步骤和方法) 部分函数创建思想: 创建过程如下: a、定义LinkList指针变量*temp: LinkList *temp; b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i; c、申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList)); d、首行头指针的前驱指针为空:head->pre=NULL; 首行指针:temp=head->next; 首行指针的前驱指针也为空:temp->pre=NULL; 定义没输入字符时文章长度为0:temp->length=0; 初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++) temp->data[i]='\0'; e、利用循环进行文本输入 for(j=0;jdata[i]=ch; //给temp指向的行赋值 ···· temp->length++;//行中字符长度加1 if(ch=='#') {NUM=j; break; //文章结束时,Num来记录整个文章的行数 }}} 在字符输入的过程中,如果在单行输入的字符超过了80个字符, 则需要以下操作: 输入字符数大于80,重新分配空间建立下一行 temp->next=(LinkList *)malloc(sizeof(LinkList)) ;

【原创】南京邮电大学 课程设计 Wilkinson(威尔金森)功分器的设计

南京邮电大学电子科学与工程学院电磁场与无线技术Wilkinson功分器 课题报告 课题名称 Wilkinson功分器 学院电子科学与工程学院 专业电磁场与无线技术 班级 组长 组员 开课时间 2012/2013学年第一学期

一、课题名称 Wilkinson(威尔金森)功分器的设计 二、课题任务 运用功分器设计原理,利用HFSS软件设计一个Wilkinson功分器,中心工作频率3.0GHz。 ?基本要求 实现一个单阶Wilkinson等功分设计,带内匹配≤-10dB,输出端口隔离≤-10dB,任选一种微波传输线结构实现。 ?进阶要求 多阶(N≥2),匹配良好(S11≤-15dB),不等分,带阻抗变换器(输出端口阻抗 不为50Ω),多种传输线实现。 三、实现方式 自选一种或者多种传输线实现,如微带线,同轴线,带状线等,要求输入输出端口阻抗为50Ω,要求有隔离电阻(通过添加额外的端口实现) 四、具体过程 1.计算基本参数 通过ADS Tool中的Linecalc这个软件来进行初步的计算。 在HFSS中选定版型为Rogers RT/duroid 5880 (tm),如具体参数下图

50Ω微带线计算 得到选取微带线宽度约为0.67mm。 70.7Ω微带线计算 得到选取微带线宽度约为0.34mm,由于微带线电长度与其宽度没有必然联系,所以两个分支微带线的长度根据具体情况进行更改。

2.绘制仿真模型 微带单阶功分器

◆微带参数:w50:阻抗为50Ω的微带线宽度;w2:两分支线宽度; l1,l2,l3,l4:各部分微带线长度; rad1,rad2:各部分分支线长度(即半环半径) ◆在本例中,需要调整的调整关键参数为w2,rad1,空气腔参数随关键参数相应调 整即可。 ◆根据计算,此处的吸收电阻值应该为100Ω,但是在实际情况中,选取97Ω。 微带多阶功分器

编译原理课程的设计--C语言编译器

C语言编译器 摘要编译原理是计算机科学与技术专业最重要的一门专业基础课程,内容庞大,涉及面广,知识点多。由于该课程教、学难度都非常大,往往费了大量时间而达不到预期教学效果俗语说:学习的最好方法是实践。本次课程设计的目的正是基于此,力求为学生提供一个理论联系实际的机会,通过布置一定难度的课题,要求学生独立完成。我们这次课程设计的主要任务是编程实现对输入合法的算符优先文法的相应的字符串进行算符优先分析,并输出算符优先分析的过程。算符优先分析法特别有利于表达式的处理,宜于手工实现。算符优先分析过程是自下而上的归约过程,但这种归约未必是严格的规范归约。而在整个归约过程中,起决定作用的是相继连个终结符之间的优先关系。因此,所谓算符优先分析法就是定义算符之间的某种优先关系,并借助这种关系寻找句型的最左素短语进行归约。通过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知识的习惯,树立团队协作精神。同时,课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。 关键词程序设计;数据库;SQL;C++; 1 任务申请 1.1、引言 编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实践性要求较高的课程。 目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。 1.2、背景 编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止

电子秤课程设计实验报告

电 子 设 计 实 验 报 告 电子科技大学 设计题目:电子称姓名:

学生姓名 任务与要求 一、任务 使用电阻应变片称重传感器,实现电子秤。用砝码作称重比对。 二、要求 准确、稳定称重; 称重传感器的非线性校正,提高称重精度; 实现“去皮”、计价功能; 具备“休眠”与“唤醒”功能,以降低功耗。

电子秤 第一节绪论 摘要:随着科技的进步,在日常生活以及工业运用上,对电子秤的要求越来越高。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。影响其精度的因素主要有:机械结构、传感器和数显仪表。在机械结构方面,因材料结构强度和刚度的限制,会使力的传递出现误差,而传感器输出特性存在非线性,加上信号放大、模数转换等环节存在的非线性,使得整个系统的非线性误差变得不容忽视。因此,在高精度的称重场合,迫切需要电子秤能自动校正系统的非线性。此外,为了保证准确、稳定地显示,要求所采用的ADC具有足够的转换位数,而采用高精度的ADC,自然增加了系统的成本。基于电子秤的现状,本文提出了一种简单实用并且精度高的智能电子秤设计方案。通过运用很好的集成电路,使测量精度得到了大大提高,由于采用数字滤波技术,使稳态测量的稳定性和动态测量的跟随性都相当好。并取得了令人满意的效果。 关键词:压力传感器,AD620N放大电路,ADC模数转换,STM32单片机,OLED 显示屏,矩阵键盘,电子秤。 1.1引言 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,是系统产生的误差更小。输出的数据更精确。而AD620N放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D 转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进行模拟量转数字量转换,然后把数字信号输送到显示电路中去,最后由OLED

数据结构课程设计——文字编辑实验报告

课程设计报告课程设计题目:文章编辑 姓名杨博 学号201520220205 班级1522202 指导教师邹国华 2016年6月30日

东华理工大学 课程设计评分表 学生姓名:杨博班级:1522202 学号:201520220205 课程设计题目:文章编辑 项目内容满分实评 选题能结合所学课程知识、有一定的能力训练。符合选题要求 (5人一题) 10 工作量适中,难易度合理10 能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10 能应用计算机软件进行编程、资料搜集录入、加工、排版、 制图等 10 能体现创造性思维,或有独特见解10 成果质量总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、 结论严谨合理;分析处理科学、条理分明、语言流畅、结构 严谨、版面清晰 10 设计说明书栏目齐全、合理,符号统一、编号齐全。格式、 绘图、表格、插图等规范准确,符合国家标准 10 有一定篇幅,字符数不少于5000 10 总分100 指导教师评语: 指导教师签名: 2016年6月30 日

实验题目:简单的文本编辑器 1、题目及要求 名称:简单的文本编辑器 内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章, 每行最多不超过80个字符,共N行。 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一字符或者子串,并将后面的字符前移。 (4)插入某一字符或者子串。 (5)查找某一字符或者子串。 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章。 2、对题目的大概理解: 本程序应实现以下功能: (1)文章内容的输入:包括字母、标点符号、数字、空格等; (2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以 及文章所有字数的个数的统计; (3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作,其中在查找的过程中统计出该字符或字符串在文章中出现的次数; 1、问题分析 本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输 入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字 符串进行查找,然后对其进行删除。插入部分为通过输入的插入位置(行、列)将字符或者 字符串插入到文章制定位置。 一、数据结构选择和概要设计

功分器的设计原理

设计资料项目名称:微带功率分配器设计方法 拟制: 审核: 会签: 批准: 二00六年一月

微带功率分配器设计方法 1. 功率分配器论述: 1.1定义: 功率分配器是一种将一路输入信号能量分成两路或多路信号能量输出的器件,也可反过来将多路信号能量合成一路输出,此时也可称为合路器。 1.2分类: 1.2.1功率分配器按路数分为:2路、3路和4路及通过它们级联形成的多路功率分配器。 1.2.2功率分配器按结构分为:微带功率分配器及腔体功率分配器。 1.2.2根据能量的分配分为:等分功率分配器及不等分功率分配器。 1.2.3根据电路形式可分为:微带线、带状线、同轴腔功率分配器。 1.3概述: 常用的功率分配器都是等功率分配,从电路形式上来分,主要有微带线、带状线、同轴腔功率分配器,几者间的区别如下: (1)同轴腔功分器优点是承受功率大,插损小,缺点是输出端驻波比大,而且输出端口间无任何隔离。微带线、带状线功分器优点是价格便宜,输出端口间有很好的隔离,缺点是插损大,承受功率小。(2)微带线、带状线和同轴腔的实现形式也有所不同:同轴腔功分器是在要求设计的带宽下先对输入端进行匹配,到输出端进行分路;而微带功分器先进行分路,然后对输入端和输出端进行匹配。

下面对微带线、带状线功率分配器的原理及设计方法进行分析。 2.设计原理: 2.1分配原理: 微带线、带状线的功分器设计原理是相同的,只是带状线的采用的是对称性空气填充或介质板填充,而微带线的主要采用的是非对称性部分介质填充和部分空气填充。下面我们以一分二微带线功率分配的设计为例进行分析。传输线的结构如下图所示,它是通过阻抗变换来实现的功率的分配。 图1:一分二功分器示意图 在现有的通信系统中,终端负载均为50Ω,也就是说在分支处的阻抗并联后到阻抗结处应为50Ω。如上图匹配网络,从输入端口看Ω==500Z Z in ,而Ω==50//21in in in Z Z Z ,且是等分的,所以1in Z =2in Z ,①处1in Z 、②处2in Z 的输入阻抗应为100Ω,这样由①、②处到输出终端50Ω需要通过阻抗变换来实现匹配。 2.2阶梯阻抗变换: 在微波电路中,为了解决阻抗不同的元件、器件相互连接而又不使其各自的性能受到严重的影响,常用各种形式的阻抗变换器。其中最简单又最常用的四分之一波长传输线阶梯阻抗变换器(图2)。它

一个简单的C语言编译器

一个简单的C语言编译器 一.小组成员 朱嘉俊()计算机996 王筱()计算机996 朱杭()计算机996 朱林()计算机994 二.运行方式 在DOS环境下运行: Cminus.exe -h 三.概述 经过一段时间的学习,我们在初步掌握了编译器的基本原理以后,设计了一个具有基本编译功能的编译器。该编译器接受类C语言语法的源代码输入,输出结果是PC机的汇编源代码。在捆绑了宏汇编编译器Masm后,即可直接生成MSDOS下的二进制可执行文件。为方便起见,以下简称为C—语言编译器。 本编译器实现了基本高级语言所必须的语法要素,包括简单变量声明、函数的实现、整数和字符串运算、条件判断语句和循环语句及跳转语句、基本代数运算、赋值等,还支持汇编语言嵌入。本编译器是利用编译器生成器Parse Generator和VC6.0在Windows平台上实现的,并开发了一个基于Windows平台的32位编译集成开发环境CompilerMan,提供了关键字彩色提示、出错同屏提示、出错代码跳转等较为完善方便的功能。 由于编译程序本身涉及到词法分析、语法分析、代码生成、错误恢复和优化等诸多模块,要在实验中做到面面俱到不太可能,所以本编译器不可避免的会存在各种问题,但作为一个具有基本功能的、可扩充的系统,完全达到了巩固编译原理的理论知识,并将其运用于实践的目的。

四.背景 编译程序,就是一种具有编撰和翻译功能的程序。人们要用计算机来解决问题,首先面临的一个问题,就是要告诉计算机解决什么问题,或者告诉计算机如何解决这个问题。这就涉及到用什么样的语言来描述的问题,人所习惯的自然语言和计算机认识的机器语言有很大的差别,用机器语言来描述人想解决的问题十分不便,因而,计算机科学家设计一些人们比较习惯的语言来描述要解决的问题,称之为高级语言。用语言来描述的问题,统称为程序。然而,用高级语言写的程序,不能被计算机所直接认识和理解,必须经过等价的转换,变成机器能理解并执行的机器语言的程序。进行这种等价转换工作的工具,就是编译程序。 1.编译程序的结构 编译程序是很复杂的,但它可被分为相对独立的几个部分,每个部分承担专门的工作,各部分间互相共享传送数据。把编译程序分解成较小的部分,不仅便于开发、调试,而且便于编译程序的移植。一个典型的编译程序通常具有如图1的结构。 图1 编译器基本结构 1.1 词法分析 词法分析负责对源程序的字符串进行扫描和分解,根据构词法将字符流(Character Stream)转化成单词流(Token Stream)。

相关文档