文档库 最新最全的文档下载
当前位置:文档库 › 下面程序的功能是

下面程序的功能是

下面程序的功能是
下面程序的功能是

下面程序的功能是:计算f=1-1/(2*3)+1/(3*4)-1/(4*5)+……+1/(19*20)

Private Sub Form_Click()

Dim f,i,sign As Integer

____ sign=1________

f = 1

______ for i=2 to 19_______

f = f + sign / (i * (i + 1))

________ sign=-1*sign_________

Next i

Print “f=”;f

End Sub

11.下面的程序是在一个字符串变量中查找“at”,并用消息框给出查找结果的报告:没有找到或找到的个数,程序如下:

Public Sub Findat()

Dim Str1 As String

Dim length As Integer

Dim sum As Integer

Dim i As Integer

Str1 = InputBox (“请输入一个字符串”)

length = _______ len(Str1)_________

i = 1

sum = 0

Do While i <= _______ Length _________

If _______ mid(Str1,i,2)_______ = “at” Then

sum = sum + 1

End If

i = i + 1

Loop

If _______ sum=0_______ Then

MsgBox “没有找到!”

Else

MsgBox “找到了” & Str (sum) & “个”

End If

End Sub

下面程序的功能是:单击窗体后,输入英文句子,将其每个单词首字母变为大字字母,再输出

Private Sub Form_Click()

Dim oldsen As String, newsen As String

Dim char As String, lastchar As String

Dim n As Integer, i As Integer

oldsen = InputBox("请输入英文句子:")

n = Len(oldsen)

lastchar = " "

For i = 1 To n

char = Mid(oldsen, i, 1)

If lastchar = " " Then

char = UCase(char) '变为大写

End If

newsen = newsen & char

lastchar = char Next i

Print "input:" ;oldsen

Print "output:" ;newsen

End Sub

编写程序,使用InputBox函数输入两个电阻的值,求它们并联和串联的电阻值,使用MsgBox 消息框输出结果,要要求保留三位小数

Sub Macro2()

Dim s1, s2 As String

Dim n5

Dim n1, n2, n3, n4 As Single

s1 = InputBox("请输入两电阻的阻值,之间用半角逗号“,”分隔", "提示信息")

n1 = Val(s1)

n2 = Val(Mid(s1, InStr(s1, ",") + 1))

If n1 > 0 And n2 > 0 Then

n3 = Round(n1 + n2, 3) '串联电阻值

n4 = Round(n1 * n2 / (n1 + n2), 3) '并联电阻值

n5 = MsgBox(n1 & "Ω和" & n2 & "Ω两个电阻的" & Chr(13) & "串联电阻值为:" & n3 & "Ω" & Chr(13) & "并联电阻值为:" & n4 & "Ω", , "计算结果")

Else

n5 = MsgBox("两电阻值输入有错,请重新输入!", , "错误提示")

End If

End Sub

用inputbox函数输入3个数据,如果这3个数据能构成三角形,计算并在窗体上输出三角形面积。

Private Sub Command1_Click()

Dim a, b, c, s, x

a = Val(InputBox("请输入第一条边长"))

b = Val(InputBox("请输入第二条边长"))

c = Val(InputBox("请输入第三条边长"))

If a + b > c And a + c > b And b + c > a Then

Print "能组成三角形"

x = 1 / 2 * (a + b + c)

s = Sqr(x * (x - a) * (x - b) * (x - c))

Print "三角形面积s="; s

Else

Print "不能组成三角形"

End If

End Sub

编程计算下列分段函数值

f(x)=1.x2+x-6 x<0且x不等于3

2.x2-5x+6 0<=x<10且x不等于2和3

3.x2-x-1 其他

if x<0 then

f=x^2+x-6

elseif x<10 and x>=0 and x<>2 and x<>3 then

f=x^2-5*x+6

else

f=x^2-x-1

end if

Function jc(n As Integer) As Long

编写程序计算1+2!+3!+4!+……+10!的程序

Private Sub Form_Click()

Dim s As Double

m = 1

For n = 1 To 10

m = m * n

s = s + m

Next

Print s

End Sub

用VB编一程序,显示出所有的水仙花数。所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=13+53+33,

Private Sub Command1_Click()

Dim i As Integer

For i = 100 To 999

If (i \ 100) ^ 3 + (i \ 10 Mod 10) ^ 3 + (i Mod 10) ^ 3 = i Then Print i

Next

End Sub

下面的程序是将输入的一个数插入到递减的有序数列中,插入后使该序列仍有序。SubButton1_Click(.....) Handles Button1.Click

Dim i% , n% ,m%

Dim a() As Integer={21,19,17,15,13,11,9,7,5,3,1}

n=UBound(a)

ReDim a(n+1)

m= Val(InputBox("输出欲插入的数"))

For i=UBound(a) -1 To Step -1

If m>=a(i) Then

a(i-1) = a(i)

If i=0 Then a(i)=m

Else

m=a(i+1)

Exit For

End If

Next i

For i=0 To m

Label1.Text &=a(i) & " "

Next i

End Sub

编一程序,将一维数组中元素向右循环移位,移位次数键盘输入。

SUB SHIFT_LEFT()

DIM TEMP I

TEMP=A(1)

FOR I=2 TO 10

A(I-1)=A(I)

NEXT I

A(10)=TEMP

END SUB

输入对话框输入100个数值数据放入数组a。将其中的整数放入数组b,然后运用选择法将数组b中的数据按从小到大排序,并将数组b以每行10个数据在窗体上输出。

Private Sub Command1_Click()

Dim I As Integer, J As Integer, K As Integer

Dim a(1 To 100) As Single

Dim b(100) As Integer

J = 0

For I = 1 To 100

Randomize (Timer)

K = Int(Rnd() * 2) + 1

'If K = 1 Then a(I) = Int(Rnd() * 1000 + 1) / 10 Else a(I) = Int(Rnd() * 100 + 1)

a(I) = InputBox("请输入第" & I & "个数:") If a(I) = Int(a(I)) Then J = J + 1: b(J) = a(I) Next I For I = 2 To J

For K = 1 To I

If b(K) > b(I) Then

b(0) = b(K)

b(K) = b(I)

b(I) = b(0)

End If

Next K

Next I

For I = 1 To J

Print b(I);

If I Mod 10 = 0 Then Print Next I

End Sub

顺序文件的建立。建立文件名为" C:\stud1.txt"的顺序文件,内容来自文本框,每按Enter 键写入一条记录,然后清除文本框的内容,直到文本框内输入"END"字符串。

Private Sub Form_Load()

Open "C:\stud1.txt" For Output As #1

Text1.text = ""

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

If UCase(Text1.Text) = "END" Then

Close #1

End

Else

Print #1 , Text1.Text

Text1.text = ""

End If

End If

End Sub

将C盘根目录下的一个文本文件old.txt复制到新文件new.txt中,并利用文件操作语句将old.txt文件从磁盘上删除。

Private Sub Command1_Click()

Dim str1$

Open "C:\old.txt" For Input As #1

Open "C:\new.txt" For Output As #2

Do While Not EOF(1)

Line Input #1,str1

Print #2 , str1

Loop

Close #1,#2

Kill "C:\old.txt"

End Sub

4. 下面程序的功能是将文本文件合并。即将文本文件“t1.txt”合并到“t.txt”文件中,请将程序填写完整。

Private Command1_Click()

Dim s$

Open "t.txt" For Append As #1

Open "t1.txt" For Input As #2

Do While Not EOF(2)

Line Input #2 , s

Print #1 , s

Loop

Close #1, 2#

End Sub

假定文本框名称为txtTest,文件名为MYFILE.TXT。可以通过下面三种方法来实现。

方法1:一行一行读

txtTest.Text =""

Open "MYFILE.TXT" For Input As #1

Do While Not EOF(1)

Line Input #1, InputData

txtTest.Text =txtTest.Text + InputData+vbCrLf

Loop

Close #1

方法2:一次性读

txtTest.Text =""

Open "MYFILE.TXT" For Input As #1 txtTest.Text = Input( LOF(1),1)

Close #1 方法3:一个个字符读

Dim InputData as String*1

txtTest.Text =""

Open "MYFILE.TXT" For Input As #1 Do While Not EOF(1)

Input #1, InputData

txtTest.Text =txtTest.Text + InputData Loop

Close #1

1请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得

1.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入:beijing shanghai(为回车键),函数将返回shanghai。 #include char *fun ( char *s, char *t) { } main( ) { char a[20],b[10],*p,*q; int i; printf("Input 1th string:") ; gets( a); printf("Input 2th string:") ; gets( b); printf("%s\n",fun (a, b )); } 2.请编写一个函数fun,它的功能是:比较两个字符串的大小,(不得调用C语言提供的字符串比较函数strcmp()),函数返回较大的字符串。若两个字符串相同,则返回第一个字符串。例如,输入:abc abd,函数将返回abd。 #include char *fun ( char *s, char *t) { } main( ) { char a[20],b[10],*p,*q; int i; printf("Input 1th string:") ; gets( a); printf("Input 2th string:") ; gets( b); printf("%s\n",fun (a, b )); } 3. 程序填空题。在【】处填上适当语句,使程序能运行得到正确结果。给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss 所指字符串数组中共有N个字符串,且串长小于M 。 #include #include #define N 5 #define M 8 void fun(char (*ss)[M])

编译原理第1章

第一章编译概述 2.典型的编译程序可划分为几部分?各部分的主要功能是什么?每部分都是必不可少的吗? 答:编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。 各部分的主要功能如下: 词法分析程序又称扫描器。进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单元,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数; 语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类; 语义分析的功能是确定源程序的语义是否正确; 中间代码生成程序的功能是将源程序生成一种更易于产生、易于翻译成目标程序的中间代码; 代码优化程序的功能是将中间代码中重复和冗余部分进行优化,提高目标程序的执行效率; 目标代码生成程序的功能是将中间代码生成特定机器上的机器语言代码; 符号表管理程序的功能是记录源程序中出现的标识符,并收集每个标识符的各种属性信息; 错误处理程序的功能是应对在编译各个阶段中出现的错误做适当的处理,从而使编译能够继续进行。 编译程序的每部分都是必不可少的。 3.解释方式和编译方式的区别是什么? 答:解释方式最终并不生成目标程序,这是编译方式与解释方式的根本区别。解释方式很适合于程序调试,易于查错,在程序执行中可以修改程序,但与编译方式相比,执行效率太低。 4.论述多遍扫描编译程序的优缺点? 答:优点:(1)可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个子程序,各遍程序可以相互覆盖;(2)可使各遍的编译程序相互独立,结构清晰;(3)能够进行充分的优化,产生高质量的目标程序;(4)可将编译程序分为“前端”和“后端”,有利于编译程序的移植。 缺点是每遍都要读符号、送符号,增加了许多重复性工作,降低了编译效率。

编译原理高级语言解释系统(希赛教育基础学院)

1.3 高级语言解释系统 为了实现在一个计算机上运行高级语言的程序,主要有两个途径:第一个途径是把该程序翻译为这个计算机的指令代码序列,这就是我们已经描述的编译过程。第二个途径是编写一个程序,它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,这样的程序就叫解释程序。从功能上说,一个解释程序能让计算机执行高级语言。它与编译程序的主要不同是它不生成目标代码,它每遇到一个语句,就要对这个语句进行分析以决定语句的含义,执行相应的动作。下面的图示意了它的工作机理。 解释程序直接对源程序中的语句进行分析,执行其隐含的操作。 如执行下面的程序: 解释程序直接输出结果4。而编译程序则生成目标代码,诸如: movf #2, b movf b , R1 addf #2, R1 movf R1, a 编译系统生成的目标代码由计算机执行才能生成结果。使用编译系统时会区分编译阶段和运行阶段,编译阶段对源程序进行编译,运行阶段是指目标程序的运行。而解释系统则是边解释边执行。从存储组织来看,在编译阶段,存储区一般要有源程序缓冲区,目标代码缓冲区,名字表以及编译程序使用的源程序中间表示和各种表格等等。在运行阶段,存储区只有目标代码和数据区了。对解释系统来说,在它工作的自始至终,存储区中要有源程序,名字表,标号表等表格,输入输出缓冲区以及数据区等等... 1.4 编译技术的发展和应用 据说第一个编译程序的出现是在20世纪50年代早期,很难讲出确切的时间,因为当初大量的实验和实现工作是由不同的小组独立完成的,多数早期的编译工作是将算术公式翻译成机器代码。用现在的标准来衡量,当时的编译程序能完成的工作十分初步,如只允许简单的单目运算,数据元素的命名方式有很多限制。然而它们奠定了对高级语言编译系统的研究和开发的基础。20世纪50年代中期出现了FORTRAN 等一批高级语言,相应的一批编译系统开发成功。随着编译技术的发展和社会对编译程序需求的不断增长,20世纪50年代末有人开始研究编译程序的自动生成工具,提出并研制编译程序的编译程序。它的功能是以任一语言的词法规则、语法规则和语义解释出发,自动产生该语言的编译程序。目前很多自动生成工具已广泛使用,如词法分析程序的生成系统LEX,语法分析程序的生成系统YACC等。20世纪60年代起,不断有人使用自展技术来构造编译程序。自展的主要特征是用被编译的语言来书写该语言自身的编译程序。1971年,PASCAL的编译程序用自展技术生成后,其影响就越来越大。 随着并行技术和并行语言的发展,处理并行语言的并行编译技术,将串行程序转换成并行程序的自动并行编译技术也正在深入研究之中。另外嵌入式应用迅速增长的需求,推动了交叉编译技术的发展.还有系统芯片设计方法和关键EDA技术的研究,也带动了专用语言VHDL等及其编译技术的不断深化。 编译实现方式的发展 -手工 机器语言 汇编 系统程序设计语言 -自动构造工具lex yacc gcc

请编写一个函数fun

试题1 请编写一个函数fun,它的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c 数的千位和十位上,b数的十位和个位数分别放在c数的个位和百位上。例如;当a=45,b=12,调用该函数后c=4251。函数形式void fun(int a,int b,long *c)。并写主函数验证,a,b两数从键盘输入。 #include void fun(int a,int b,long *c){ } void main() { int a,b; long c; printf(“Input a,b:”); scanf(“%d%d”,&a,&b); 此处函数调用,请填空; printf(“The result is:%d”,c); } 试题2 编写函数int f(int lim,int aa[ ]),该函数的功能是求出小于或等于1im的所有素数并放在aa数组中,该函数返回所求出的素数的个数。并写主函数验证。 #include #define MAX 100 int f(int lim,int aa[]){ } void main() { int limit,i,sum; int aa[MAX]; printf(“输入一个整数”); scanf(“%d”,&limit); 此处函数调用,请填空,用sum保存函数调用返回的结果; for(i=0;i

编译原理(语法分析程序设计)

一、实验内容和目的 1. 已知待分析的C语言子集的语法,用EBNF表示如下: (1)<程序>→main()<语句块> (2)<语句块>→“{” <语句串>“}” (3)<语句串>→<语句>{;<语句>} ; (4)<语句>→<赋值语句>|<条件语句>|<循环语句> (5)<赋值语句>→ID=<表达式> (6)<条件语句>→if(条件)<语句块> (7)<循环语句>→while(<条件>)<语句块> (8)<条件>→<表达式><关系运算符><表达式> (9)<表达式>→<项>{+<项>}|<项>{-<项>} (10)<项>→<因子>{*<因子>}|<因子>{/<因子>} (11)<因子>→ID|NUM|(<表达式>) (12)<关系运算符>→<|<=|>|>=|==|!= 2. 实验目的、要求实现的功能 实验目的:编制一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。 实验要求:在上机(一)词法分析的基础上,采用递归子程序法或其他适合的语法分析方法,实现其语法分析程序。要求编译后能检查出语法错误。 3. 将实验方法改写为适合预测分析法的文法如下: (1) <程序>→main()<语句块> (2)<语句块>→{ <语句串>} (3)<语句串>→<语句>; <语句串> (3_1) <语句串>→ε (4)<语句>→<赋值语句> (5)<语句>→<条件语句> (6) <语句>→<循环语句> (7)<赋值语句>→ID=<表达式> (8)<条件语句>→if(<条件>)<语句块> (9)<循环语句>→while(<条件>)<语句块> (10)<条件>→<表达式><关系运算符><表达式> (11)<表达式>→<项><表达式`> (11_1)<表达式`>→+<项><表达式`> (11_2)<表达式`>→-<项><表达式`> (11_3)<表达式`>→ε (12) <项>→<因子><项`> (12_1) <项`>→*<因子><项`> (12_2)<项`>→/<因子><项`> (12_3)<项`>→ε (13) <因子>→ID (14) <因子>→NUM (15) <因子>→(<表达式>) (16) <关系运算符>→< (17) <关系运算符>→<=

名词解释

名词解释 1.BIU(总线接口单元):即Bus Interface Unit,是8086微处理器中的两个基本功能部件之一,由段寄存器、指令指针、地址形成逻辑、总线控制逻辑和指令队列等组成。它同外部总线相连,根据EU的请求,执行8086 CPU 对存储器或I/O 接口的总线操作,完成数据传送,并且计算、形成20位的内存的物理地址。 2.接口:在微型计算机系统中,常用的外围设备有键盘、鼠标、显示器、打印机等等,把外围设备与微型计算机连接起来实现数据传送的控制电路成为外设接口电路,简称接口。CPU通过接口中的三类端口(数据口、状态口、控制口)与外设进行数据信息、状态信息和控制信息的交换。 3.中断:所谓中断是指CPU在正常运行程序时,由于内、外部事件引起CPU暂时中止正在运行的程序,转而去执行请求CPU中止的内、外部时间的服务程序,待该服务程序处理完毕后又返回到被终止的程序的过程。通过中断传送方式,可以使CPU和外设以及外设和外设之间能并行工作,从而提高了系统的工作效率,充分发挥CPU高速运算的能力。 4.DMA传送方式:即直接存储器存取(Direct Memory Access)方式,是一种不需要CPU干预也不需要软件介入的高速数据传送方式。由于CPU只启动而不干预这一传送过程,同时整个传送过程只由硬件即DMA控制器来控制完成,这样就很大程度上减轻了CPU 资源占有率,可以大大节省系统资源,同时其数据传送速率可以达到很高,主要适用于一些高速的I/O设备。 5.总线:总线(Bus)是计算机各种功能部件之间传送信息的公共通路,由传输信息的物理介质以及一套管理信息传输的通用规则(协议)所构成。根据总线的规模、用途及其应用场合的不同,微机总线可分为三类:片总线、内总线和外总线。 6.EU(执行单元):即Execution Unit,是8086微处理器中的两个基本功能部件之一,由通用寄存器、标志寄存器、算术逻辑单元(ALU)和EU控制系统等组成。EU从BIU 的指令队列中获得指令,然后执行该指令,完成指令所规定的操作。 7.微型计算机:是以微处理器为基础,配以内存以及输入输出接口电路和相应的辅助电路而构成的裸机。分为三类:单片机、单板机、个人电脑。 8.8288:是8086CPU工作在最大模式下构成系统中的总线控制器。在最大模式下,8086CPU不直接提供用于存储器或I/O读写的读写命令等控制信号,而是将当前要执行的传送操作类型编码为3个状态位输出,由总线控制器8288对状态信号进行译码产生相应控制信号。 9.NMI:是8086CPU的不可屏蔽中断请求信号。无论标志寄存器中IF标志位的状态如何,CPU收到有效的NMI必须进行响应;NMI是上升沿有效;中断类型号固定为2;它在被

第01套 给定程序中,函数fun的功能

第01套给定程序中函数fun的功能是将形参n所指变量中各位上为偶数的数去除剩余的数按原来从高位到低位的顺序组成一个新的数并通过形参指针n传回所指变量。例如输入一个数27638496新的数为739。请在程序的下划线处填入正确的内容并把下划线删除使程序得出正确的结果。注意源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行也不得更改程序的结构给定源程序include ltstdio.hgt void fununsigned long n unsigned long x0 i int t i1 whilen tn __1__ ift2 __2__ xxti ii10 n n /10 n__3__ main unsigned long n-1 whilengt99999999nlt0 printfquotPlease input0ltnlt100000000: quot scanfquotldquotampn funampn printfquotnThe result is: ldnquotn 解题思路第一处t是通过取模的方式来得到n的个位数字所以应填10。第二处判断是否是奇数所以应填0。第三处最后通形参n来返回新数x 所以应填x。给定程序MODI1.C中函数fun 的功能是计算n。例如给n输入5则输出120.000000。请改正程序中的错误使程序能输出正确的结果。注意不要改动main函数不得增行或删行也不得更改程序的结构给定源程序include ltstdio.hgt double fun int n double result 1.0 if n 0 return 1.0 while n gt1 ampamp n lt 170 result n-- return result main int n printfquotInput N:quot scanfquotdquot ampn printfquotnnd lfnnquot n funn 解题思路第一处条件语句书写格式错误应

编译原理实验报告《LL(1)语法分析器构造》

《LL(1)分析器的构造》实验报告 一、实验名称 LL(1)分析器的构造 二、实验目的 设计、编制、调试一个LL(1)语法分析器,利用语法分析器对符号串的识别,加深对语法分析原理的理解。 三、实验内容和要求 设计并实现一个LL(1)语法分析器,实现对算术文法: G[E]:E->E+T|T T->T*F|F F->(E)|i 所定义的符号串进行识别,例如符号串i+i*i为文法所定义的句子,符号串ii+++*i+不是文法所定义的句子。 实验要求: 1、检测左递归,如果有则进行消除; 2、求解FIRST集和FOLLOW集; 3、构建LL(1)分析表; 4、构建LL分析程序,对于用户输入的句子,能够利用所构造的分析程序进行分析,并显示出分析过程。 四、主要仪器设备 硬件:微型计算机。 软件: Code blocks(也可以是其它集成开发环境)。 五、实验过程描述 1、程序主要框架 程序中编写了以下函数,各个函数实现的作用如下: void input_grammer(string *G);//输入文法G

//将文法G预处理得到产生式集合P,非终结符、终结符集合U、u, int eliminate_1(string *G,string *P,string U,string *GG);//消除文法G中所有直接左递归得到文法GG int* ifempty(string* P,string U,int k,int n);//判断各非终结符是否能推导为空 string* FIRST_X(string* P,string U,string u,int* empty,int k,int n);求所有非终结符的FIRST集 string FIRST(string U,string u,string* first,string s);//求符号串s=X1X2...Xn的FIRST集 string** create_table(string *P,string U,string u,int n,int t,int k,string* first);//构造分析表 void analyse(string **table,string U,string u,int t,string s);//分析符号串s 2、编写的源程序 #include #include #include using namespace std; void input_grammer(string *G)//输入文法G,n个非终结符 { int i=0;//计数 char ch='y'; while(ch=='y'){ cin>>G[i++]; cout<<"继续输入?(y/n)\n"; cin>>ch; } } void preprocess(string *G,string *P,string &U,string &u,int &n,int &t,int &k)//将文法G预处理产生式集合P,非终结符、终结符集合U、u, { int i,j,r,temp;//计数 char C;//记录规则中()后的符号 int flag;//检测到() n=t=k=0; for( i=0;i<50;i++) P[i]=" ";//字符串如果不初始化,在使用P[i][j]=a时将不能改变,可以用P[i].append(1,a) U=u=" ";//字符串如果不初始化,无法使用U[i]=a赋值,可以用U.append(1,a) for(n=0;!G[n].empty();n++) { U[n]=G[n][0]; }//非终结符集合,n为非终结符个数 for(i=0;i

编译原理答案

《编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语 义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 盛威网(https://www.wendangku.net/doc/0a16535219.html,)专业的计算机学习网站1 《编译原理》课后习题答案第一章 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。

STM32 入门 程序解释

接触了STM32的开发板快一周了,拿到板子厂商提供了些DEMO程序,其他想自己学习,看了ST的资料手册,感觉看下来,一个工具还是不知道怎么用,还好现在网络强大,在论坛上可以去找自己需要的资料.我把搜集的资料整理了一下,以及自己加了一些自己的,方便自己以后再用到,方便查找,同时和网友们一起分享,希望你们有什么新的想法也提出来,一起分享. 开始吧!嘿嘿 简述 1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)

①浮空输入_IN_FLOATING ②带上拉输入_IPU ③带下拉输入_IPD (所谓上拉就是接一电阻到电源;下拉就是接一电阻到地。也就是说带上拉就是口初始的时候是高电平,下拉就是低电 平。) ④模拟输入_AIN ⑤开漏输出_OUT_OD ⑥推挽输出_OUT_PP ⑦复用功能的推挽输出_AF_PP ⑧复用功能的开漏输出_AF_OD I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系

统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如: 对于串口,假如最大波特率只需,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO 引脚速度。 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。 GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。 2 在STM32中如何配置片内外设使用的IO端口首先,一个外设经过①配置输入的时钟和②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口

编译原理语法分析程序

编译原理实验报告 题目:对下面的文法对象,使用c语言构造它的预测分析程序;并任意给一算术表达式进行分析测试. 分析对象对象定义如下: 算术表达式→项|算术表达式+项|算术表达式-项 项→因式|项*因式|项/因式 因式→变量|(算术表达式) 变量→字母 字母→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z 一、分析 语法分析部分我们我们采用ll(1)方法实现,采用ll(1)方法实现语法发分析要求文法满足以下要求: 一个文法能否用确定的自顶向下分析与文法中相同左部的每个产生式右部的开始符号集合有关,当有右部能=*=>ε时则与其左部非终结符的后跟符号集合也有关,此外在产生式中不存在左递归即经过压缩,无左递归,无回溯。它的基本思想是从左到右扫描源程序,同时从识别符号开始生成句子的最左推导,并只向前查看一个输入符号,便能唯一确定应选择的规则。 下面将确切地定义满足确定的自顶向下分析条件的文法即LL(1)文法及LL(1)文法的判 别并介绍如何对非LL(1)文法进行等价变换问题,也就是消除一个文法中的左递归和左公共因子。 注意: 一个文法中含有左递归和左公共因子绝对不是LL(1)文法,所以也就不可能用确定的自顶向下分析法,对此结论可以证明。然而,某些含有左递归和左公共因子的文法在通过等价变换把它们消除以后可能变为LL(1)文法,但需要用LL(1)文法的定义判别,也就是说文法中不含左递归和左公共因子,只是LL(1)文法的必要条件。 LL(1) 文法的定义(5种定义): 一个文法符号串的开始符号集合定义如下: 定义 1.设G=(VT,VN,S,P)是上下文无关文法,α是任意的文法符号串,FIRST(α)是从α推导出的串的开始符号的终结符集合。。。。 FIRST(α)={a|α=*=>aβ,a∈VT,α,β∈V*}若α=*=>ε,则规定ε∈FIRST(α).当一个文法中相同左部非终结符的右部存在能=*=>ε的情况则必须知道该非终结符的后跟符号的集合中是否含有其它右部开始符号集合的元素。为此,我们定义一个文法非终结符的后跟符号的集合如下: 定义2.设G=(VT,VN,S,P)是上下文无关文法,A∈VN,S是开始符号 FOLLOW(A)={a|S=*=>μAβ,且a∈VT,a∈FIRST(β),μ∈VT* ,β∈V+}若S=*=>μAβ,且βε, 则#∈FOLLOW(A)。也可定义为:FOLLOW(A)={a|S=*=> …Aa…,a ∈VT} 若有S=*=> …A,则规定#∈FOLLOW(A)

编译原理课后习题答案-清华大学-第二版

第1章引论 第1题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2) 源程序:源语言编写的程序称为源程序。 (3) 目标程序:目标语言书写的程序称为目标程序。 (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,就回答八部分。 第3题 何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系? 答案: 翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。 解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功

LANDMARK综合解释软件简介-1

LandMark综合解释软件功能简介 一、概述 Landmark综合解释软件(2003)除了对原有模块进行改进,提高一体化、自动化程度外,还推出了很多的新模块,帮助解释员更快更好的识别油气藏,这些技术对勘探开发研究有着重要的意义。OpenWorks 是Landmark软件一体化的数据平台,所有应用程序产生的各类数据均存储于OpenWorks数据库中,形成了一个统一的数据体,使得各个应用程序之间都可以很方便地进行数据交换。为了使Landmark软件一体化功能更加完善,OpenWorks 2003提供了统一的时-深转换工具。 在勘探开发应用软件的发展和使用历程中,Landmark公司的应用软件一体化的数据管理结构及管理工具,一直是整个勘探开发领域的领头羊。覆盖整个勘探开发研究过程中各种数据类型的一体化的数据模型,是集中数据管理、多学科数据共享的基础;丰富、全面、灵活的数据加载、输出和管理工具,为数据管理者提供了高效率的、全面的数据加载能力和数据质量控制手段;基于web技术的数据和查询工具,为各层次的管理者和技术人员提供了简单实用的数据浏览和查询手段。 二、软件功能简介 1.SynTool 2003(合成地震记录制作) SynTool是一体化的层位标定工具,用以将地质分层、岩性与地震数据精确地联结起来,它提供了建立精确的合成地震记录所需的特征参数,并提供了强大的曲线编辑处理功能来帮助用户校正测井曲线和解决井眼问题。特有的厚度编辑器和层段编辑器可帮助用户预测远离井的地方构造与油藏属性的变化。还可以从井旁地震道计算地震子波,并对提取的子波在相位和时间延迟上进行处理,最后显示和应用它,推导出准确的合成地震记录,进行储层标定。2.SeisWorks 2003(2D/3D地震资料解释) SeisWorks是2D/3D地震解释与分析领域的工业技术领导者,拥有强大的层位、断层解释及图分析功能。它的多测网合并能力允许用户轻松地将三维工区与二维工区结合起来,并可合并多个三维工区,而无需进行数据的重新格式化与数

编译原理实验报告5-语法分析程序的设计(2)

实验5 语法分析程序的设计(2) 一、实验目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中算法优先分析方法。 二、实验内容 设计一个文法的算法优先分析程序,判断特定表达式的正确性。 三、实验要求 1、给出文法如下: G[E] E->T|E+T; T->F|T*F; F->i|(E); + * ( ) i + * ( ) i 2、计算机中表示上述优先关系,优先关系的机内存放方式有两种1)直接存放,2)为 优先关系建立优先函数,这里由学生自己选择一种方式; 1、给出算符优先分析算法如下: k:=1; S[k]:=‘#’; REPEAT 把下一个输入符号读进a中; IF S[k]∈V T THEN j:=k ELSE j:=k-1; WHILE S[j] a DO BEGIN REPEAT Q:=S[j]; IF S[j-1]∈V T THEN j:=j-1 ELSE j:=j-2 UNTIL S[j] Q 把S[j+1]…S[k]归约为某个N; k:=j+1;

S[k]:=N; END OF WHILE; IF S[j] a OR S[j] a THEN BEGIN k:=k+1;S[k]:=a END ELSE ERROR UNTIL a=‘#’ 1、 根据给出算法,利用适当的数据结构实现算符优先分析程序; 2、 利用算符优先分析程序完成下列功能: 1) 手工将测试的表达式写入文本文件,每个表达式写一行,用“;”表示结束; 2) 读入文本文件中的表达式; 3) 调用实验2中的词法分析程序搜索单词; 4) 把单词送入算法优先分析程序,判断表达式是否正确(是否是给出文法的语 言),若错误,应给出错误信息; 5) 完成上述功能,有余力的同学可以对正确的表达式计算出结果。 四、实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C++ 程序集成环境 五、实验步骤 1、 分析文法中终结符号的优先关系; 2、 存放优先关系或构造优先函数; 3、利用算符优先分析的算法编写分析程序; 4、写测试程序,包括表达式的读入和结果的输出; 5、程序运行效果,测试数据可以参考下列给出的数据。 六、测试数据 输入数据: 编辑一个文本文文件expression.txt ,在文件中输入 如下内容: 正确 结果: (1)10; 输出:正确 (2)1+2; 输出:正确 (3)(1+2)*3+(5+6*7); 输出:正确 (4)((1+2)*3+4 10; 1+2; (1+2)*3+(5+6*7); ((1+2)*3+4; 1+2+3+(*4+5); (a+b)*(c+d); ((ab3+de4)**5)+1;

《编译原理》教案

《编译原理》教案 授课类型(请打√):理论课讨论课□实验课□练习课□其他□ 教学方式(请打√):讲授讨论□示教□指导其他□ 教学资源(请打√):多媒体模型□实物□挂图□音像□其他□教学内容 0 课程学习的要求及任务,学习方法介绍,成绩考核标准。 第一章引论 1.1 什么叫编译程序? 通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序)转换成另一种语言程序(称为目标语言程序),而后者与前者在逻辑上是等价的。如果源语言是诸如FORTRAN、Pascal、C、Ada、Smalltalk或Java这

样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序就称为编译程序。 高级语言程序除了像上面所说的先编译后执行外,有时也可“解释”执行。一个源语言的解释程序是这样的程序,它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。本书将不对解释程序作专门的讨论。实际上,许多编译程序的构造与实现技术同样适用于解释程序。 根据不同的用途和侧重,编译程序还可进一步分类。专门用于帮助程序开发和调试的编译程序称为诊断编译程序(Diagnostic Compiler),着重于提高目标代码效率的编译程序叫优化编译程序(Optimizing Compiler)。现在很多编译程序同时提供了调试、优化等多种功能,用户可以通过“开关”进行选择。运行编译程序的计算机称宿主机,运行编译程序所产生目标代码的计算机称目标机。 如果一个编译程序产生不同于其宿主机的机器代码,则称它为交叉编译程序(CrOSS Compiler)。如果不需重写编译程序中与机器无关的部分就能改变目标机,则称该编译程序为可变目标编译程序(Retargetable Compiler)。 1.2 编译过程概述 编译程序过程: 从输入源程序开始到输出目标程序为止的整个编译过程可分为以下五个阶段:词法分析,语法分析,语义分析,中间代码产生,优化和目标代码生成. 1.3 编译程序的结构 编译程序的结构可以按照从输入源程序开始到输出目标程序为止的整个编译过程可分为以下五个阶段:词法分析,语法分析,语义分析,中间代码产生,优化和目标代码生成。 1.3.1 编译程序总框

Matlab datafun 函数

版本:matlab 2010a Matlab datafun函数的相关用法 目录: 1.conv2 (2) 2.conv (3) 3.convn (4) 4.corrcoef (4) 5. cov (5) 6. cumprod (6) 7. cumsu (7) 8. deconv (7) 9. detrend (8) 10. diff (9) 11. fft2 (9) 12. fft (11) 13.fftshift (12) 14. filter2 (12) 15. filter (13) 16. hist (13) 17. histc (14) 18. ifft2 (16) 19. issorted (17) 20. max (19) 21. mean (20) 22. median (20) 23. min (21) 24. mode (22) 25. prod (23) 26. sort (24) 27. sortrows (26) 28. std (27) 29. sum (28) 30. var (30)

1.conv2 功能简介 进行二维卷积操作 使用方法 C=conv2(A,B) C=conv2(Hcol,Hrow,A) C=conv2(...,'shape') 说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2 返回二维卷积结果部分,参数 shape 可取值如下: 》full 为缺省值,返回二维卷积的全部结果; 》same 返回二维卷积结果中与 A 大小相同的中间部分; valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。 应用举例A=magic(5) A= 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 B=[1 2 1;0 2 0;3 1 3] B= 1 2 1 0 2 0 3 1 3 C=conv2(A,B) C= 17 58 66 34 32 38 15 23 85 88 35 67 76 16 55 149 117 163 159 135 67 79 78 160 161 187 129 51 23 82 153 199 205 108 75 30 68 135 168 91 84 9 33 65 126 85 104 15 27 相关函数 filter2

软件功能介绍

一、双击桌面“ZB2”软件的快捷方式,打开ZB2软件; 二、点击软件界面程序编辑区,新建程序(左下角属性编辑区有文字内容); 三、软件界面分为四大版块:菜单功能版块、指令选择版块、属性编辑版块、程序编写版块。 四、菜单功能版块包括:新建程序、打开程序、保存程序、另存为、导入配置、导出配置、绘制连线、删除连线、下载程序、添加子程序、删除子程序。 A、新建程序:就是新建新的空白程序文件; B、打开程序:打开之前保存过的程序; C、保存程序:将编写好的程序保存的软件默认的文件夹,不可修改保存路径; D、另存为:将新编写的程序或修改后的程序存到其它文件夹(非软件默认保存文件夹)中,可以修改保存路径; E、导入配置与导出配置其功能类似打开与另存为; F、绘制连线:一般绘制连线只会出现在循环命令、条件判断、转移三个指令中;(具体连接位置后面会进行介绍)点击绘制连线进行绘制、绘制完之后要点击还原; G、删除连线:删除程序中的任意一根连线,点击删除连线,将鼠标移至程序连线上,连线成红色,左键双击,删除连线,删除完之后要点击还原; F、下载程序:将编写好的程序下载到主板中,下载时一般会有多个

串行通信口供选择,若主板不能显示进行下载,可选择其他串行通信口。主板接通电源(电源LED点亮),将下载线连接好,按主板“复位”“下载”,下载LED点亮(主板有两个LED点亮),点击软件界面的下载,主板下载LED闪烁; H、添加子程序、删除子程序:添加与删除子程序;应用在后面有介绍 五、指令选择版块包括:普通命令、循环命令、条件判断、子程序调用、转移。 A、普通命令: a、蜂鸣:简单的滴一声(接喇叭) b、小车前进:可以对两个电机同时进行控制,小车可朝一个方向前进; c、小车后退:可以对两个电机同时进行控制,小车可朝一个方向前进; d、小车停止: e、小车慢速右转:单轮旋转转弯; f、小车快速右转:双轮旋转转弯; g、小车慢速左转:单轮旋转转弯; f、小车快速左转:双轮旋转转弯; h、延时一秒:固定的延时一秒; i、乐曲--世界杯: j、乐曲—生日快乐:

相关文档