编译实验报告2007年

编译实验报告2007年
编译实验报告2007年

编译原理实验报告

计算机学院

计算机科学与技术

姓名:

班号:

学号:

指导老师:刘远兴

日期: 2007

[一]消除左递归

1、算法:

要求:输入无回路文法G

输出无左递归的等价文法G'

方法将非终结符合理排序:A1,A2,...,An;

for i in 2..n

loop for j in 1..i-1

loop 用Aj→δ1|δ2|...|δk的右部

替换每个形如Ai→Ajγ产生式中的Aj,

得到新产生式:Ai→δ1γ|δ2γ|...|δkγ;

消除Ai产生式中的直接左递归;

end loop;

end loop;

概述:将不是直接左递归的非终结符右部展开到其他产生式中

注意:若G产生句子的过程中出现A A的推导,则无法消除左递归

设计方法:

如果一个文法中含有无用符号,ε产生式或单产生式,则总可将它们予以消除。因此,不失一般性,在下面的讨论中,我们可假定所给的文法不含上述三种产生式。

由于文法的直接左递归性表现在含有形如A→Aα(α∈V+)的产生式上,所以为了消除直接左递归,只须将此种产生式进行改写,使之不含左递归的非终结符号即可。

用来进行此种改写的方法之一,是引入一对元语言符号{、},用以表示花括号{x}中的符号串x可出现任意多次 (包括零次),并把形如

A→Aα|β的产生式 (其中,β不以A打头)等价地改写为

A→β{α} (4 8)

从而也就消除了此产生式的直接左递归性。例如,对于文法中的产生式1和2,利用此种方法可分别改写为

E→T{AT}

T→F{MF}

用来改写产生式(4 8)的另一种方法,是对A引入一个新的非终结符号A′,并把式(4 8)等价地写成

A→βA′

A′→αA′|ε

由于β不以A打头,α不以A′打头,故所得的两个产生式不是直接左递归的。例如,对于文法(4 1),经此种方法改写之后就成为

1 E→TE′

2 E′→ATE′|ε

3 T→FT′

4 T′→MFT′|ε(4 1)′

5 F→(E)|i

6 A→+|-

7 M→*|/

一般地,设文法中的全部A产生式为

A→Aα1|Aα2|…|Aαn|β1|β2|…|βm

其中,每个β i均不以A打头,则消除直接左递归后所得到的产生式为

A→β1A′|β2A′|…|β mA′

A′→α1A′|α2A′|…|αnA′|ε

上述方法可消除出现在产生式中的全部直接左递归性,但却不能消除经两步或多步推导所出现的一切左递归性。例如,对于文法

S→Aβ|γ(4 9)

A→Sα(4 10)

因有S Aβ Sαβ,故S是一个左递归的非终结符号。为了消除此种递归性,可将产生式(4 10)代入产生式(4 9),我们得到了与原文法等价的文法 (见引理2 1):

S→Sαβ|γ(4 9)′

现假定γ不以S打头,则消除产生式(4 9)′的直接递归性后,我们便得到了无任何左递归性的文法

S→γS′

S′→αβS′|ε

由此可见,为了消除那些经多步推导所出现的左递归性,可首先查出那些具有左递归性的非终结符号,然后对以这些非终结符号为左部的产生式,通过逐步代入有关产生式的方式将它们化为直接左递归的产生式,最后再消除其中的全部直接左递归即可。显然,这是一个十分繁琐的过程。下面,我们再介绍一种一次消去文法的一切左递归性的方法,为此,先引入文法的一种矩阵表示。设G是一前后文无关文法,它的VN中含有n个非终结符号:X1,X2,…,Xn,对于G

的每一产生式

Xi→γ1|γ2|…|γm,

我们可将它的各候选式γ1,γ2,…,γm分为两类:把以非终结符号打头的γi归为一类;而将以终结符号打头的归为另一类。例如,若某个γk以Xj打头,就把γk写成Xjαji (αji∈V+)。此时,若将元语言符号→及|形式地用“=”及“+”表示,即可将此产生式写成

Xi=X1α1i+X2α2i+…+Xnαni+β i

其中,β i是那些以终结符号打头的诸候选式之“和”。此外,若此产生式不含以某一非终结符号Xj打头的候选式,则相应的αji为 。这样,我们就可将G的诸产生式写成如下的矩阵方程

(X1 X2 … Xn)=(X1 X2 … Xn)·α11[]α12[]…[]α1n

α21[]α22[]…[]α2n

…[]…[]…[]…

αn1[]αn2[]…[]αnn+(β1 β2 …βn)(4 11)

X=XA+B(4 12)

式(4 11)或式(4 12)即为文法G的一种矩阵表示。不过,需要注意的是,对上面各式中所出现的运算符应作如下的理解:乘法运算表示字符串的连接,加法运算表示选择。仿3 4 2中的讨论可知,矩阵方程(4 12)有形如

X=BA*(4 13)

的解。显然,要计算矩阵A的闭包A*一般是很困难的,但可设法予以回避。事实上,由于

A*=I+A+A2+…=I+AA*

其中

I=ε[] [] []…[]

[]ε[] []…[]

…[]…[]…[]…[]…

[] [] []…[]ε

若设

A*=Z=z11[]z12[]…[]z1n

z21[]z22[]…[]z2n

…[]…[]…[]…

zn1[]zn2[]…[]znn

则可得如下两个矩阵式

X=BZ(4 14)

Z=I+AZ(4 15)

由于列矩阵B的各元素的每一项均以终结符号开始,故矩阵式(4 14)相应的诸产生式的右部符号串也以终结符号开始,也就是说它们都不是左递归的。至于由式(4 15)新引入的产生式,由于它们的左部为zij,显然也不会有任何的左递归性。此外,从式(4 12)推演到式(4 14)和式(4 15)的过程中,实际上只进行了一些等价的代换演算,故由式(4 14)和式(4 15)所表示的文法将与原文法G等价。但若新文法中含有无用的产生式 (它们可能由式(4 15)引入),则应予以剔除。

例4 1考虑文法

S→Sa|Ab|a(4 16)

A→Sc

显然,其中S,A都是左递归的非终结符号。首先写出此文法的矩阵表示

(S A)=(S A)a[]c

b[] +(a )

a[]c

b[] *=Z=z11[]z12

z21[]z22

则有

(S A)=(a ) z11[]z12

z21[]z22

z11[]z12

z21[]z22=ε[]

[]ε+a[]c

b[] z11[]z12

z21[]z22

于是,我们就得到了与文法(4 16)等价的文法

S→az11A→az12

z11→az11|cz21|ε

z12→az12|cz22

z21→bz11z22→bz12|ε

删除其中的无用产生式,我们有

S→az11

z11→az11|cz21|ε

z21→bz11

以此即可求出给定产生式的左递归。

【二】提取左公共因子定义:

A →αβ

1|αβ

2

A →αβ

1|αβ

2

当不确定用A产生式的哪个候选项替换A时,可以重写A?产生式来推迟这种决定,直到看见足够的输入,能正确决定所需选择为止。

这一过程被称为提取左因子,它类似于有限自动机的确定化。

将: A →αβ1|αβ2

替换为:A →αA' A'→β1|β2

它等价于: A →α(β1|β2 )

基本算法:

输入文法G

输出等价的无左因子文法G'

方法重复下述过程,直到所有A产生式候选项中不再有公共前缀

重排A产生式:A→αβ1|αβ2| ...?|αβn|γ;

并用 A→αA'|γ

和 A'→β1|β2| ...|βn取代原A产生式。

确定的自顶向下分析要求对给定语言的文法必须是LL(1)形式,然而,不一定每个语言都有LL(1)文法,对一个语言的非LL(1)文法是否能变换为等价的LL(1)形式以及如何变换是本课时讨论的主要问题,由LL(1)文法的定义可知若文法中含有直接或间接左递归,或含有左公共因子则该文法肯定不是LL(1)文法,因而,我们设法消除文法中的左递归,提取左公共因子对文法进行等价变换。在某些特殊情况下可能体其变为LL(1)文法。

提取左公共因子

若文法中含有形如:A→αβ|αγ的产生式,这导致了对相同左部的产生式其右部的FIRST集合相交,也就是SELECT(A→αβ)∩SELECT(A→αγ)≠Φ,不满足LL (1)文法的充分必要条件。

现将产生式A→αβ|αγ进行等价变换为:

A→α(β|γ)

其中'(',')'为元符号,可进一步引进新非终结符A',去掉'(',')'使产生式变换为:A →αA'

A' →β|γ

写成一般形式为:

A→αβ1|αβ2|… |αβn,提取左公共因子后变为:

A→α(β1|β2|… |βn),再引进非终结符A',变为:

?? ?? A→A'

?? ?? A'→ β1|β2|… |βn

若βi、βj、βk…(其中1≤i,j,k≤n)中仍含有左公共因子,这时可再次提取,这样反复进行提取直到引进新非终结符的有关产生式再无公共因子为止。

例1 ??若文法Gl的产生式为:

(1)S→aSb

(2)S→aS

(3)S→ε

对产生式(1)、(2)提取左公因子后得

S→aS(b|ε)

S→ε

进一步变换为文法G'1:

S→aSA

A→b

A→ε

S→ε

例2 ??若文法G2的产生式为:

?? ??(1)A→ad

?? ??(2)A→Bc

?? ??(3)B→aA

?? ??(4)B→bB

?? ??产生式(2)的右部以非终结符开始,因此左公共因子可能是隐式的,所以这种情况下

对右部以非终结符开始的产生式,用其相同左部而右部以终结符开始的产生式进行相应

替换,对文法G2分别用(3)、(4)的右部替换(2)中的B,可得:

?? ??(1)A→ad

?? ??(2)A→aAc

?? ??(3)A→bBc

(4)B→Aa

(5)B→Bb

提取产生式(1)、(2)的左公共因子得:

A→a(d | Ac)

A→bBc

B→aA

B→bB

引进新非终结符A',去掉'(',')'后得G'2为:

(1) A→aA'

(2) A→bBc

(3) A' →d

(4) A' →Ac

(5) B→aA

(6) B→bB

不难验证经提取左公共因子后文法G'1仍不是LL(1)文法。而文法G'2变成

LL(1)文法,因此文法中不含左公共因子只是LL(1)文法的必要条件。

值得注意的是对文法进行提取左公共因子变换后,有时会使某些产生式变成无用产生式,在这种情况下必须对文法重新压缩(或化简)。

上机总结:

上机课多了,貌似我们的实际操作应该有所提高才对,但现在我发现我自己实际情况并不是这样,原因有很多了。但主要的是上机的时候大部分的时间都不知道要做什么,或者说是都不会做吧!大学是教会学生怎么学习的地方,但当我们还没学莫名其妙的跑到机房的时候,刨根的我们就不知道怎么做。编译原理还算好的,因为,压根的我们就是用c或 vc++等已经学过的语言来编写有关编译的程序,说到底,就是锻炼我们思考问题和编写程序的能力了!我c本来就不怎么样,可能是实际操作实在是有些少吧。编写程序的时候碰到了很多对高手来说简单但我却发现不到的问题。结合网上的一些信息还算勉强做完了。这次的课程设计我体会很多,感想很多,主要的收获很多。不是学到了多少令人兴奋的东西,而是让我对编译还有c有了更深一步的了解。百炼成钢,用在写程序上感觉最合适不过了,只有千锤百炼,我们的编程能力才能得到提高;只

有不断的分析问题,才能使我们解决问题的能力在实践中成长。这次上机体会到的都是“虚”的但也是“真”的问题。感谢老师!

汉明码编码实验报告

重庆工程学院 电子信息学院 实验报告 课程名称:_ 数据通信原理开课学期:__ 2015-2016/02_ 院(部): 电子信息学院开课实验室:实训楼512 学生姓名: 舒清清梁小凤专业班级: 1491003 学号: 149100308 149100305

重庆工程学院学生实验报告 课程名 称 数据通信原理实验项目名称汉明码编译实验 开课院系电子信息学院实验日期 2016年5月7 日 学生姓名舒清清 梁小凤 学号 149100308 149100305 专业班级网络工程三班 指导教 师 余方能实验成绩 教师评语: 教师签字:批改时间:

一、实验目的和要求 1、了解信道编码在通信系统中的重要性。 2、掌握汉明码编译码的原理。 3、掌握汉明码检错纠错原理。 4、理解编码码距的意义。 二、实验内容和原理 汉明码编码过程:数字终端的信号经过串并变换后,进行分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。 三、主要仪器设备 1、主控&信号源、6号、2号模块各一块 2、双踪示波器一台 3连接线若干

四、实验操作方法和步骤 1、关电,按表格所示进行连线 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【汉明码】。 (1)将2号模块的拨码开关S12#拨为10100000,拨码开关S22#、S32#、S42#均拨为00000000;(2)将6号模块的拨码开关S16#拨为0001,即编码方式为汉明码。开关S36#拨为0000,即无错模式。按下6号模块S2系统复位键。 3、此时系统初始状态为:2号模块提供32K编码输入数据,6号模块进行汉明编译码,无差错插入模式。 4、实验操作及波形观测。 (1)用示波器观测6号模块TH5处编码输出波形。 (2)设置2号模块拨码开关S1前四位,观测编码输出并填入下表中: 五、实验记录与处理(数据、图表、计算等) 校对输入0000,编码0000000 输入0001,编码0001011 输入0010,编码0010101 输入0011,编码0011110 输入0100,编码0100110 输入0101,编码0101101 输入0110,编码0110011输入0111,编码0111000

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

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级: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.实践部分

编译原理实验报告

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

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

汉明码编译码

汉明码编译码 一设计思想 汉明码是一种常用的纠错码,具有纠一位错误的能力。本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。 二实现流程 1.汉明码编译码 图 1 汉明码编译码框图 1)根据生成多项式,产生指定的生成矩阵G 2)产生随机的信息序列M 得到码字 3)由C MG 4)进入信道传输 S RH得到伴随式 5)计算=T 6)得到解码码流 7)得到解码信息序列 2.汉明码误码性能分析 误码率(SER)是指传输前后错误比特数占全部比特数的比值。 误帧率(FER)是指传输前后错误码字数占全部码字数的比值。 通过按位比较、按帧比较可以实现误码率和误帧率的统计。

3. 构建完整通信系统 图 2 完整通信系统框图 三 结论分析 1. 汉明码编译码 编写了GUI 界面方便呈现过程和结果。 图 3 汉明码编译码演示GUI 界面 以产生(7,4)汉明码为例说明过程的具体实现。 1) 根据生成多项式,产生指定的生成矩阵G 用[H,G,n,k] = hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H 、G 以及码字长度n 和信息位数k 100101101011100010111H ????=?????? 1 10100001101001 1100101 010001G ????? ?=?? ?? ?? 2) 产生随机的信息序列M 输入信息序列 Huffman 编码 Hamming 编码 信道Hamming 译码 Huffman 译码输出信息序列噪声

实验四 汉明码系统

实验四汉明码系统 一、实验原理和电路说明 差错控制编码的基本作法是:在发送端被传输的信息序列上附加一些监督码元,这些多余的码元与信息之间以某种确定的规则建立校验关系。接收端按照既定的规则检验信息码元与监督码元之间的关系,一旦传输过程中发生差错,则信息码元与监督码元之间的校验关系将受到破坏,从而可以发现错误,乃至纠正错误。 通信原理综合实验系统中的纠错码系统采用汉明码(7,4)。所谓汉明码是能纠正单个错误的线性分组码。它有以下特点: 码长n=2m-1 最小码距d=3 信息码位k=2n-m-1 纠错能力t=1 监督码位r=n-k 这里m位≥2的正整数,给定m后,既可构造出具体的汉明码(n,k)。 汉明码的监督矩阵有n列m行,它的n列分别由除了全0之外的m位码组构成,每个码组只在某列中出现一次。系统中的监督矩阵如下图所示: 1110100 H=0111010 1101001 其相应的生成矩阵为: 1000101 0100111 G= 0010110 0001011 汉明译码的方法,可以采用计算校正子,然后确定错误图样并加以纠正的方法。 图2.4.1和图2.42给出汉明编码器和译码器电原理图。

a6 a5 a4 a3 a2 a1 a0 a a a a 图2.4.1汉明编码器电原理图 a a a a a a a3 图2.4.2汉明译码器电原理图 表2.4.1 (7,4)汉明编码输入数据与监督码元生成表 a6bit,其次是a5、a4……,最后输出a0位。 汉明编译码模块实验电路功能组成框图见图2.4.4和图2.3.5所示。 汉明编码模块实验电路工作原理描述如下: 1、输入数据:汉明编码输入数据可以来自ADPCM1模块的ADPCM码字,或来自同

汉明码编译码实验

汉明码编译码实验 一、实验目的 1、掌握汉明码编译码原理 2、掌握汉明码纠错检错原理 二、实验内容 1、汉明码编码实验。 2、汉明码译码实验。 3、汉明码纠错检错能力验证实验。 三、实验器材 LTE-TX-02E通信原理综合实验系统----------------------------------------------模块8 四、实验原理 在随机信道中,错码的出现是随机的,且错码之间是统计独立的。例如,由高斯白噪声引起的错码就具有这种性质。因此,当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。由于信息码元序列是一种随机序列,接收端是无法预知的,也无法识别其中有无错码。为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。不同的编码方法有不同的检错或纠错能力。有的编码就只能检错不能纠错。 那么,为了纠正一位错码,在分组码中最少要加入多少监督位才行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致汉明码的诞生。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。下面我们介绍汉明码的构造原理。 一般说来,若码长为n,信息位数为k,则监督位数r=n?k。如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求 2r? 1 ≥n 或2r ≥k + r + 1 (14-1)下面我们通过一个例子来说明如何具体构造这些监督关系式。 设分组码(n,k)中k=4,为了纠正一位错码,由式(14-1)可知,要求监督位数r≥3。若取r=3,则n= k + r =7。我们用α6α5…α0表示这7个码元,用S1、S2、S3表示三个监督关系式中的校正子,则S1 S2 S3的值与错码位置的对应关系可以规定如表14-1所列。 表14-1

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级: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).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

汉明码编译码

汉明码编译码

汉明码编译码 一设计思想 汉明码是一种常用的纠错码,具有纠一位错误的能力。本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。 二实现流程 1.汉明码编译码 生成矩阵G 信息序列M 产生码字C 信道 计算伴随式S接收码流R 校验矩阵H 解码码流C2 解码信息序列 M2 图 1 汉明码编译码框图 1)根据生成多项式,产生指定的生成矩阵G 2)产生随机的信息序列M 3)由C MG 得到码字 4)进入信道传输

三 结论分析 1. 汉明码编译码 编写了GUI 界面方便呈现过程和结果。 图 2 汉明码编译码演示GUI 界面 以产生(7,4)汉明码为例说明过程的具体实现。 1) 根据生成多项式,产生指定的生成矩阵G 用[H,G,n,k] = hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H 、G 以及码字长度n 和信息位数k 100101101011100010111H ????=?????? 1 10100001101001 1100101010001G ????? ?=?? ?? ?? 2) 产生随机的信息序列M 0010=01000111M ?? ???? ????

3) 由C MG =得到码字 010001101101000010111C ?? ??=?? ???? 4) 进入信道传输 假设是BSC 信道,错误转移概率设定为0.1 传输后接收端得到的码流为 000011110100000111101R ?? ??=?? ???? 红色表示错误比特。 5) 计算=T S RH 得到伴随式 011=100001S ?? ???? ???? 错误图样 0000001 0000010 0000100 0001000 0010000 0100000 1000000 伴随式 101 111 011 110 001 010 100 查表可知第一行码字错误图样为0100000,第二行码字错误图样为1000000,第三行码字错误图样为0000001。 进行??=+C R E 即可得到纠错解码的码字C2。 6) 得到解码码流 0110100200000001110010C ?? ??=?? ????

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级: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

卷积码实验报告

苏州科技大学天平学院电子与信息工程学院 信道编码课程设计报告 课设名称卷积码编译及译码仿真 学生姓名圣鑫 学号 32 同组人周妍智 专业班级通信1422 指导教师潘欣欲

一、实验名称 基于MAATLAB的卷积码编码及译码仿真 二、实验目的 卷积码是一种性能优越的信道编码。它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。本实验简明地介绍了卷积码的编码原理和Viterbi译码原理。并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。经过仿真和实测,并对测试结果作了分析。 三、实验原理 1、卷积码编码原理 卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。卷积码一般表示为(n,k,K)的形式,即将 k个信息比特编码为 n 个比特的码组,K 为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的 n 各码元不经与当前组的 k 个信息比特有关,还与前 K-1 个输入组的信息比特有关。编码过程中相互关联的码元有 K*n 个。R=k/n 是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选 n,k 较小,K 值可取较大(>10),但以获得简单而高性能的卷积码。

卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。 2、卷积码Viterbi译码原理 卷积码概率译码的基本思路是:以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正是最大似然的准则。卷积码的最大似然译码与分组码的最大似然译码在原理上是一样的,但实现方法上略有不同。主要区别在于:分组码是孤立地求解单个码组的相似度,而卷积码是求码字序列之间的相似度。基于网格图搜索的译码是实现最大似然判决的重要方法和途径。用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。这样一直进行到最后第 L 级(L 为发送序列的长度)。由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi 译码正是基于这种想法。对于(n, k, K )卷积码,其网格图中共 2kL 种状态。由网格图的前 K-1 条连续支路构成的路径互不相交,即最初 2k_1 条路径各不相同,当接收到第 K 条支路时,每条路径都有 2 条支路延伸到第 K 级上,而第 K 级上的每两条支路又都汇聚在一个节点上。在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第 K 级只留下2K条幸存路径。选出的路径同它们的对数似然函数的累加值将一起被存储起来。由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较它们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。由此可见,上述译码过程中的基本操作是,“加-比-选”,即每级求出对数似然函数的累加值,然后两两比较后作出选择。有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作

(7,4)汉明码编译码系统设计.doc

南华大学电气工程学院 《通信原理课程设计》任务书 设计题目:(7, 4)汉明码编译码系统设计 专业:通信工程 学生姓名: 马勇学号:20114400236 起迄日期:2013 年12月20日~2014年1月3日指导教师:宁志刚副教授 系主任:王彦教授

《通信原理课程设计》任务书

《通信原理课程设计》设计说明书格式 一、纸张和页面要求 A4纸打印;页边距要求如下:页边距上下各为2.5 厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 二、说明书装订页码顺序 (1)任务书 (2)论文正文 (3)参考文献,(4)附录 三、课程设计说明书撰写格式 见范例 引言(黑体四号) ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆(首行缩进两个字,宋体小四号) 1☆☆☆☆(黑体四号) 正文……(首行缩进两个字,宋体小四号) 1.1(空一格)☆☆☆☆☆☆(黑体小四号) 正文……(首行缩进两个字,宋体小四号) 1.2 ☆☆☆☆☆☆、☆☆☆ 正文……(首行缩进两个字,宋体小四号) 2 ☆☆☆☆☆☆ (黑体四号) 正文……(首行缩进两个字,宋体小四号) 2.1 ☆☆☆☆、☆☆☆☆☆☆,☆☆☆(黑体小四号) 正文……(首行缩进两个字,宋体小四号) 2.1.1☆☆☆,☆☆☆☆☆,☆☆☆☆(楷体小四号) 正文……(首行缩进两个字,宋体小四号) (1)……

图1. 工作波形示意图(图题,居中,宋体五号) ………… 5结论(黑体四号) ☆☆☆☆☆☆(首行缩进两个字,宋体小四号) 参考文献(黑体四号、顶格) 参考文献要另起一页,一律放在正文后,不得放在各章之后。只列出作者直接阅读过或在正文中被引用过的文献资料,作者只写到第三位,余者写“等”,英文作者超过3人写“et al”。 几种主要参考文献著录表的格式为: ⑴专(译)著:[序号]著者.书名(译者)[M].出版地:出版者,出版年:起~止页码. ⑵期刊:[序号]著者.篇名[J].刊名,年,卷号(期号):起~止页码. ⑶论文集:[序号]著者.篇名[A]编者.论文集名[C] .出版地:出版者,出版者. 出版年:起~止页码. ⑷学位论文:[序号]著者.题名[D] .保存地:保存单位,授予年. ⑸专利文献:专利所有者.专利题名[P] .专利国别:专利号,出版日期. ⑹标准文献:[序号]标准代号标准顺序号—发布年,标准名称[S] . ⑺报纸:责任者.文献题名[N].报纸名,年—月—日(版次). 附录(居中,黑体四号)

编译原理实验报告一

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

基于matlab的汉明码4FSK通信仿真实验报告

河海大学计算机及信息工程学院(常 州) 课程设计报告 题目不同信道下汉明码4FSK系统仿真 专业通信工程 学号 0962310312 学生姓名程海粟 指导教师高远

目录 一、实验目的 (3) 二、实验器材 (3) 三、实验内容及原理 (3) (一)汉明码编解码原理 (3) (二)4FSK调制解调原理 (6) (三)三种信道模型简介 (9) (四)程序调用函数介绍……………………………………… 10 四、实验仿真效果图 (12) 五、心得体会 (15) 六、附录 (15) 七、参考文献 (18)

不同信道下汉明码的4FSK 系统仿真 一、实验目的 1、了解熟悉Matlab 仿真软件使用; 2、掌握4进制频移键控(4FSK )的调制与解调基本原理; 3、掌握Matlab 仿真软件仿真4FSK 的系统设计; 4、熟悉无线通信仿真过程及物理层仿真。 二、实验器材 Matlab 仿真软件。 三、实验内容及原理 (一)汉明码编解码原理 1、编码原理 一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求 21r n -≥或211r k r -≥++ (1) 下面以(7,4)汉明码为例说明原理: 设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。若取r=3,则n=k+r=7。我们用 6543210 a a a a a a a 来表示这7个码元,用 123 s s s 的值表示3个监督关系式中的校正子,则123 s s s 的值与错误码元位置的对应关系 可以规定如表1所列。 表1 校正子和错码位置的关系

汉明码的编译码设计与仿真

****************** 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年春季学期 通信系统仿真训练 题目:汉明码的编译码设计与仿真 专业班级: 姓名: 学号: 指导教师: 成绩:

摘要 与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。在接收端通过纠错译码自动纠正传输中的差错来实现码纠错功能,成为前向纠错FEC。在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。通过传输码列中假如冗余位(也称纠错位)。可以实现前向纠错。但这种方法比简单重传协议的成本要高。汉明码利用奇偶块机制降低了前向纠错的成本。利用汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。本文主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制编译码图。在此基础上,对汉明码的性能进行分析,得出结论。 关键词:MATLAB 汉明码性能

目录 1.前言 (1) 2.汉明码的构造原理 (2) 2.1 汉明码的构造原理 (2) 2.2 监督矩阵H和生成矩阵G (3) 2.3 校正子(伴随式)S (4) 3.汉明码编码器的设计 (6) 3.1 汉明码编码方法 (6) 3.2 汉明码编码程序设计 (6) 3.3 汉明码编码程序的编译及仿真 (7) 4.汉明码的译码器的设计 (10) 4.1 汉明码译码方法 (10) 4.2 汉明码译码程序的设计 (11) 4.3 汉明码译码程序的编译及仿真 (13) 5.总结 (17) 6.参考文献 (18) 7.附录 (19)

编译原理标准实验报告

电子科技大学 实验报告 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:计算机学院软件工程实验室 二、实验项目名称:词法分析器的设计与实现 三、实验学时:4学时 四、实验原理 1.编译程序要求对高级语言编写的源程序进行分析和合成,生成目标程序。词法分析是对源程序进行的首次分析,实现词法分析的程序为词法分析程序。 2.词法分析的功能是从左到右逐个地扫描源程序字符串,按照词法规则识别出单词符号作为输出,对识别过程中发现的词法错误,输出相关信息。 3.状态转换图是有限有向图,是设计词法分析器的有效工具。 五、实验目的 通过设计词法分析器的实验,使同学们了解和掌握词法分析程序设计的原理及相应的程序设计方法,同时提高编程能力。 六、实验内容 实现求n!的极小语言的词法分析程序,返回二元式作为输出。 七、实验器材(设备、元器件) 1.操作系统:Windows XP

2.开发工具:VC6.0 3.普通PC即可 八、实验步骤 (1)启动VC6.0,创建空白工程项目。选择菜单中的“文件”->“新建”->“项目”,在弹出的对话框中,左边的“项目类型”框中,选择“Visual C++ 项目”,在右边框中,选择“空项目(.Net)”,在对话框下边,选择工程文件存放目录及输入名称,如Example1,单击“确定”。 (2)建立相应的单词符号与种别对照表; (3)根据状态转换图编写相应的处理函数; (4)完成词法分析器; (5)编译与调试以上程序; (6)生成相应的*.dyd文件,作为后面语法分析的输入文件。 九、实验数据及结果分析

可以对源程序进行词法分析,如果有错给出出错信息和所在行数,如果无错则生成二元式文件。 十、实验结论 本实验程序较好地完成了词法分析程序的设计与实现,能够对所给文法的程序进行词法分析,在没有词法错误的时候生成相应的二元式文件。该实验程序可一次性给出源程序中的词法错误。 十一、总结及心得体会 通过该实验,对词法分析程序的设计,以及运用C语言进行编程有了更深刻的理解,同时加深了自己对词法分析程序的原理的理解与掌握,提高了自己的动手能力。 十二、对本实验过程及方法、手段的改进建议 程序设计合理,代码可进一步优化。 报告评分: 指导教师签字:

海明编码实验报告

海明编码实验报告 学科专业:计算机科学与技术 姓名: 学号: 指导教师: 天津工业大学计算机科学与技术学院 二零一零年十二月

一.海明编码原理 海明码是一种可以纠正一位差错发现两位差错的编码。它是利用在信息位为k 位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式: 2r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r) 式中 k为信息位位数 r为增加冗余位位数 2.海明码的生成与接收 二.海明编码方法 1)海明码的生成(顺序生成法)。 例3.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8) 求:海明码码字。 解:1)把冗余码A、B、C、…,顺序插入信息码中,得海明码 码字:" A B 1 C 1 0 0 D 1 1 0 0 " 码位: 1 2 3 4 5 6 7 8 9 10 11 12 其中A,B,C,D分别插于2k位(k=0,1,2,3)。码位分别为1,2,4,8。 2)冗余码A,B,C,D的线性码位是:(相当于监督关系式) A->1,3,5,7,9,11; B->2,3,6,7,10,11; C->4,5,6,7,12;(注 5=4+1;6=4+2;7=4+2+1;12=8+4) D->8,9,10,11,12。 3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0): A=∑(0,1,1,0,1,0)=1 B=∑(0,1,0,0,1,0)=0 C=∑(0,1,0,0,0)=1 D=∑(0,1,1,0,0)=0

编译原理实验报告

《编译原理》实验报告软件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)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

信道编码实验报告

无线通信基础课程设计报告 (信道编码) 小组成员: 指导老师: 完成时间:

无线通信系统课程设计报告 实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从 而使接收端产生图象跳跃、不连续等现象。信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。提高数据传输可靠性,降低误码率是信道编码的任务。 实验名称:信道编码 实验目标:本实验的目标是领会信道编码的基本思想。并通过比较有无信道编码模块的 不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。 实验原理:打开“Channel_Coding_74.vi”前面板如图1所示,打开程序框图并理解参与 信道编码的整个数据流。程序包含上下两个独立的部分如图2所示,下面部分是生成误码率曲线如图1(b),其结构和上面部分类似,你只需要关注上面部分程序即可;上面部分代码大致可由做7个模块组成,每一模块完成一项功能。你负责的是这个实验的“编码和解码”功能。这些模块为: 1、读取图片 LabVIEW提供了一个能够读取JPEG格式的图像并输出图像数据的模块。提供的还原像素图.vi完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。 (a)实验操作部分(b)误码率曲线 图1 前面板 2、信道编码 我们的下一个目标是对信源比特流进行信道编码。信道编码方案很多,线性分组码、卷积码、LDPC码等等;这里我们采用简单的(7,4)线性分组码。

图2 程序框图 线性分组码是一类重要的纠错码。在(n ,k )线性分组码中,常用到能纠正一位错误的汉明码。其主要参数如下: 码长: 21m n =-; 信息位:21m k m =--; 校验位:m n k =-; 最小距离: d = 3; 纠错能力: t = 1; 本次实验需要用到的是(7,4)分组码,属系统码,前四位为信息位,后三位为冗余位。 3、BPSK 调制 上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特 映射成适合信道传输的符号。这里我们采用最简单的BPSK 调制:将信息0映射为幅值为1的信号,信息1映射为幅值为-1的信号,如图3所示。 (1,0)=0 图3 BPSK 映射图

相关文档
最新文档