RSS
 

Archive for 一月, 2008

体系结构。。

19
复习进度很慢。。。无奈~太容易堕落。。
明天去434~。。。到下午完成前三章的“精化”(记忆+理解)+第五章的初看(记忆+基本理解)
晚上完成全部的“精化”(包括所有课后习题以及所有概念)
今天NCE到第六课了。
要一个人复习!明天8点半到434报到。。7点50分起床!
 
 

计算机体系结构主要概念

18

计算机性能的高速增长受益于:电路技术的发展,体系结构技术的发展。
—————————————————————————————————————
从计算机语言的角度,把计算机系统按功能划分成多级层次结构
层次结构:计算机系统可以按语言的功能划分为多级层次结构,每一层以不同的语言为特征。
—————————————————————————————————————
语言实现的两种基本技术
翻译:先把N+1级程序全部变换成N级程序后,
再去执行新产生的N级程序,在执行过程中N+1
级程序不再被访问。
解释:每当一条N+1级指令被译码后,就直接
去执行一串等效的N级指令,然后再去取下一
条N+1级的指令,依此重复进行。
解释执行比翻译花的时间多,但存储空间占用较少。
—————————————————————————————————————
计算机体系结构:程序员所看到的计算机的属性,即概念性结构与功能特性。
按照计算机系统的多级层次结构,不同级程序员所看到的计算机具有不同的属性。
Amdahl提出的体系结构是传统机器级的体系结构。即一般所说的机器语言程序员所看到的传统机器级所具有的属性。
经典计算机体系结构概念的实质:计算机系统中软硬件界面的确定,也就是指令集的设计,该界面之上由软件的功能实现,界面之下由硬件和固件的功能来实现。
透明性:在计算机技术中,对本来存在的事物或属性,从某一角度来看又好像不存在的概念称为透明性。
—————————————————————————————————————

 
 

1月14日

14
暂时不整理了。。因为进度有点慢。。要去自习室了。。
明天晚上一定要开始第二遍的复习!!!(前三章)
目前复习到了语法分析中的算符有限文法。。还有一部分语法分析、语义分析和中间代码生成、运行空间组织和优化。。大概有6个小时的工作量。
 
 

编译原理——第三章词法分析

14

词法分析的任务是:从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。
单词符号有:关键字、标识符、常数、运算符和界符这几种类型。
输出的单词符号常常用二元式表示:(单词种别,单词符号的属性值)
单词种别通常用整数编码;对于一个种别内有多个单词的符号,那么还需要给出单词的符号属性信息。
—————————————————————————————————————
输入和预处理
通常将输入的字符存入缓冲器中,常常还需要将它们进行预处理,去除多余的白字符。
用双缓冲技术可以避免缓冲器的边界打断单词的识别。
单词符号的识别,超前搜索
有的时候需要用超前搜索的技术才能识别某一符号的具体类别。
状态转换图
状态转换图是一张有向图,结点代表状态,状态之间用箭弧链接,上标记可能出现的输入字符。
—————————————————————————————————————
设计词法分析器的步骤
1. 设计表格(单词符号/种别编码<单词种别>/助记符/内码值<单词符号的属性值>)
2. 画状态转换图
3. 编码
正规式和正规集
假定有字母表Σ
(1)ε和Φ都是Σ上的正规式,它们对应的正规集是{ε}和{Φ}。
(2) 任何a属于Σ都是Σ上的正规式,对应的正规集是{a}。
(3) 如果u和v都是Σ上的正规式,它们所表示的正规集为L(u)和L(v)。那么(u|v)、(u.v)、(u)*也都是正规式,他们所表示的正规集为L(u) U L(v)、L(u)L(v)(连接积)、(L(u))*(闭包)。
也就是说,正规式形如ab*,ab(a|b),a*b*等等,他们所能代表的字符串的集合就是对应的正规集。
正规式的运算顺序为先有*后.再而|。
—————————————————————————————————————
DFA(确定优先自动机)和NFA(非确定优先自动机)
两者都是一个五元式(S,Σ,δ,S0,F)
S:有限状态集
Σ:有穷字母表,每一个元素称为一个输入字符
δ:一个映射关系,对于DFA这是一个从S*Σ到S的单值部分映射,对于NFA这是一个从S*Σ*到2S(S的子集的幂集)的映射。
S0是初态,是S的一个元素
F是终态集合,是S的一个子集
—————————————————————————————————————
表示方法:状态转换表和状态转换图
DFA的确定性表现在单值映射S*Σ->S
若S中有M个元素,Σ中有N个元素,则状态转换图中最多有M个状态结点,且其中有一个初态结点,有0个或者多个终态结点(用双圈表示)。对于DFA,每一个结点最多连接N条弧,且每条弧的标记各不相同,对于NFA则可以相同。
对于Σ*上的任何字α,若存在一条从初态到某一终态的通路,且这条通路上所有弧的标记符连接成的字符等于α,则称α被DFA/NFA M识别。DFA/NFA M所能识别字的全体记为L(M)。
Σ上的一个子集是正规的,当且仅当它等于Σ上的某一个DFA M所能识别字的全体L(M)。
—————————————————————————————————————
对于任何一个NFA M,一定存在一个DFA M’,使得L(M)=L(M’)
NFA到DFA的转换步骤如下:
1. 改造状态转换图
a. 增加X初态结点和Y终态结点,用ε和原结点相连。
b. 替换输入字符为ab/,a|b和a*形式的弧,分别代之以两条弧相连,两条弧可选和一个自环回路。
2. 子集法转换到DFA
先定义两个概念
I是状态集S的子集,定义ε_CLOSURE(I)是这样的集合,它包括所有I中的状态结点和I中的状态结点经过任意多个ε弧可以到达的状态结点;定义Ia是这样的集合,它等于ε_CLOSURE(I经过一个a弧到达的状态结点集合)。
a. 根据状态转换图填写下表

I Ia Ib Ic
=ε_CLOSURE(X)

其中第一个格子计算X的ε_CLOSURE,右边的格子都以左边第一列的元素为I进行计算。计算完一行后,看看当前得到的格子中的内容有哪些还未在第一列出现,将这些尚未出现的内容填入第一列,继续计算,直至全部得到的内容都在第一列出现。
b. 对表格内容进行重新编号,根据表格第一列进行0,1,2,…编号。

S a b c
0
1

含原初态的结点为新初态,含原终态的结点为新终态
3. DFA化简
寻找一个状态数比M少的DFA M’,使得L(M)=L(M’)
状态s和状态t等价:从s出发的能识别出的某个字w而停止于终态,则t出发也能识别出同样的字而停止于终态,反之亦然。若不满足,则称为s状态和t状态是可区别的。
DFA化简的目标是将M的状态集划分成一些不相交的子集,并且任意两个子集的任意两个状态都是可区别的,同一个子集的任意两个状态都等价。最后在每个子集中取一个代表元素即可。
a. 把状态集S划分为I1和I2,I1为非终态集,I2为终态集,显然这两个集合的元素与元素之间是相互区别的。
b. 取当前得到的子集I,让每个元素都经过弧a,根据得到状态属于不同组的子集,进行子集的划分。不断重复此步,直至所有子集都不能再分。
c. 每个子集任取一个代表字母,代替该子集内的其他字母。
含原初态的集合的代表元素为新初态,含原终态的集合的代表元素为新终态
—————————————————————————————————————
计算题型4:用文字描述正规式表示的正规集
注意:不要看表面,要概括出深层次的含义;可以尝试几个例子证实自己的判断
((ε|0)1*)*:任意的01串
(0|1)*0(0|1)(0|1):任意长度大于等于3的01串,且倒数第三位是0
0*10*10*10*:01串,但只包含3个1
(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*:01串,且0和1的个数均为偶数。靠举例子,如0,1,00,01,10,11等等。归纳判断
—————————————————————————————————————
计算题型5: 写出文字描述的正规集所对应的正规式
字母表{a,b,c}上的串,且第一个a先于第一个b:c*a(a|b|c)*或(a|c)*a(a|b|c)*均可。
—————————————————————————————————————
计算题型6:DFA到NFA的转化并化简
a. NFA转化成DFA并化简;注意新加节点X和Y,改造NFA;小心计算;注意新初态、终态的选择。
b. 根据正规式构造最小化DFA
注意:遇到*,采用环即可搞定(两个半环上写*),如果*对应的只是几个字符相或,则直接用一个结点,自环即可(环上标字符)。
如构造1(0|1)*101的最小化DFA
如构造1(1010*|1(010)*1)*0的最小化DFA
c. 根据描述构造最小化DFA
同上。
如构造一个最小化DFA,输入字母表为{0,1},接受0开始1结尾的串。
—————————————————————————————————————
计算题型7: 正规式/正规集->正规文法??貌似不要求

 
 

编译原理——第二章高级语言及其语法描述

11

程序语言
一个程序语言是一个记号系统,程序语言主要由语法和语义两个方面定义。
语法包括词法规则和语义规则。词法规则是指单词符号的形成规则;语法规则则规定了如何从单词符号形成更大的结构(语法单位)。
对于一个语言来说,不仅要给出它的词法和语法规则,而且要定义它的单词符号和语法单位的意义。这就是语义问题。语义规则的阐明目前常使用基于属性文法的语法制导翻译方法。
—————————————————————————————————————
上下文无关文法
文法
:描述语言的语法结构的形式规则(即语法规则)。
上下文无关文法所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。(就事论事的考虑问题)
一个上下文无关文法G是一个四元式(VT,VN,S,ρ),其中
VT是一个非空有限集,它的每个元素都称为终结符号。
VN是一个非空有限集,它的每个元素都称为非终结符号。
S是一个非终结符号,成为开始符号。
ρ是一个产生式集合(有限),每个产生式的形式是P→α,其中P属于VN,α属于(VT U VN)*。开始符号S至少必须在某个产生式的左部出现一次。

—————————————————————————————————————
我们常常用大写字母表示非终结符,小写字母表示终结符,希腊字母表示由非终结符和终结符组成的符号串。
作为描述程序语言的上下文无关文法,我们对它有限制。
(1)    没有任何产生式如同P→P
(2)    每个非终结符P都必须有用处。一方面意味着,必须存在含P的句型;也就是从S出发,存在推导image;另一方面,必须存在非终结符串γ,使得P经过有限步推导到达γ,也就是P不存在永不终结的回路。
这种有限制的上下文无关文法称为简化了的文法。
—————————————————————————————————————
直接推出:我们称image 当且仅当A→γ且α、β属于(VT U VN)* 。
推导:一个推出的序列成为推导,用image 表示经过0步或者多步的推出,用image 表示经过1步或者多步的推出。
最左(右)推导:任何一步image 都是对α的最左(右)非终结符进行替换的。
—————————————————————————————————————
句型和句子
假定G是一个文法,S是它的开始符号。如果image ,则称α是一个句型。仅含终结符的句型称为句子。文法G产生的句子的全体是语言,记做L(G),image
—————————————————————————————————————
短语、直接短语、句柄,需要仔细理解
令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句型,如果有:image ,则称β是句型αβδ相对于非终结符A的短语
如果有image ,则称β是句型αβδ相对于image直接短语。一个句型的最左直接短语称为该句型的句柄
—————————————————————————————————————
用语法树来描述这些概念,需要仔细理解
语法树:用一张图表示一个句型的推导,这种表示称为语法分析树,简称语法树。语法树描述了句子的结构。
子树:语法树中除了叶结点以外的任意一个结点连同它的所有子孙结点构成一棵子树。
短语:一棵子树的所有叶子结点从左至右排列起来形成一个相对于子树根的短语。
直接短语:仅有父子两代的一棵子树,它的所有叶子结点从左至右排列起来所形成的符号串。
句柄:一个句型的语法树中最左的那棵只有父子两代的子树的所有叶子结点的从左至右排列,即最左的直接短语。
—————————————————————————————————————
文法的二义性
如果文法中存在某个句子,该句子对应两棵或者两棵以上的语法树,则该句子是二义性的,包含二义性句子的文法是二义性文法。
如果一个文法中存在某个句子,它有两个不同的最左推导或两个不同的最右推导,则称这个文法是二义性的。
我们常常需要改造二义性文法,将其转换为无二义性文法。
文法的二义性与语言的二义性无关,语言的二义性指的是两个文法可以产生同一个语言。而文法的二义性是指存在一个句子,用同一个产生规则(文法),用多种产生办法。
—————————————————————————————————————
文法的分类
文法G是一个四元式,其中产生式部分,要求左部、右部是由终结符和非终结符组成,并且左部至少包含一个非终结符。
0型文法(短语文法),相当于图灵机。
1型文法(上下文有关文法),对产生式部分施加限制,左部的长度小于等于右部,或者S直接推出空串,并且S不得出现在任何产生式右部。
2型文法(上下文无关文法),对产生式部分施加限制,必须是一个非终结符推出一个由终结符和非终结符组成的串。
3型文法(正规文法),对产生式施加限制,必须是A→αB或者A→α,此时成为右线性文法。
表示能力0最强,3最弱。
—————————————————————————————————————
计算题型2:文法相关推导
定义文法G[N]为
N->D|ND
D->0|1|2|3|4|5|6|7|8|9
求0127的最左最右推导
最左:N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127
最右:N=>ND=>N7=>ND7=>N27=>ND27=>N127=>D127=>0127
关键是:从开始符出发,牢记try最左/右的非终结符。一步一步,不要漏掉步骤。—————————————————————————————————————
计算题型3:构造文法
构造文法G,使得L(G)={0,1,00,11}
产生式为S->0|1|11|00
G={{S},{0,1},{S->0,S->1,S->00,S->11},S}
一个语言可以由不同的文法产生,这些不同形式的文法等价。
文法是四元式,构造文法不要忘记要构造4个部分,不要只求产生式(虽然这是重点)
难得文法构造如何?

 
 

1月11日

11
今天工作效率似乎不高。
很不满意,在寝室里似乎再也做不了什么了。不过编译前三章一定要完成!
————————————————-
明天上午去机房完成软件项目管理的项目~;下午在机房完成体系结构作业。
晚上去自习室,完成第二部分,第4-7章/4-5章。
————————————————-
不要再堕落了呢。。“从第一天开始努力的~!”。。静心。。要耐得住寂寞啊~
 
 

编译原理——第一章引论

11

编译程序相关的几个概念
翻译程序:把一种语言程序(源语言程序)转换成另一种语言程序(目标语言程序),并且两者在逻辑上等价。
汇编程序:源程序是汇编语言,目标程序是机器语言的翻译程序。
编译程序:源程序是高级语言,目标程序是某种汇编语言或机器语言的翻译程序。
解释程序:将某种高级语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
编译和解释的根本区别是:是否生成目标代码。
—————————————————————————————————————
诊断编译程序:专门用于帮助程序开发和调试的编译程序
优化编译程序:着重于提高目标代码效率的编译程序
宿主机:运行编译程序的计算机
目标机:运行编译程序产生的目标代码的计算机
可变目标编译程序:不需要重新编译程序中与机器无关的部分就能改变目标机,则这种编译程序称为可变目标编译程序。
—————————————————————————————————————
编译各个阶段任务
词法分析
:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(或成为单词符号或符号)。在词法分析中,所依据的是语言的词法规则,描述词法规则的有效工具是正规式和有限自动机。
语法分析:在词法分析基础上,根据语言的语法规则,把词法符号分解成各类语法单位。语法分析所依据的是语言的语法规则,语法规则通常用上下文无关文法描述。
词法分析是一种线性分析,而语法分析是一种层次结构分析。
语义分析与中间代码产生:对于语法分析识别出的各类语法范畴分析其含义,并进行初步翻译生成中间代码。包含两部分工作,首先对各种语法范畴进行静态语义检查;另一方面,进行中间代码的翻译。这一阶段依据的是语言的语义规则,通常用属性文法描述语义规则。
中间代码通常用四元式形式表示。四元式包含算法、左操作数、右操作数和结果四个部分。
优化:对中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。主要包括公共子表达式的提取,循环优化,删除无用代码等等。
目标代码生成:把目标代码(或经过优化处理之后)变换成特定机器上的低级语言代码,目标代码可以是绝对代码或可重定位的指令代码或汇编语言代码。而现今,大部分编译程序产生的目标代码是可重定位的指令代码。
—————————————————————————————————————
编译程序的总体结构
编译程序主要包括:词法分析器、语法分析器、语义分析和中间代码产生器(可选)、优化器(可选)和目标代码生成器五个主要部分和“表格管理”、“出错处理”两个模块。
QQ截图未命名

词法分析器(又称为扫描器),它接收输入的源程序,对源程序进行扫描和分解(词法分析),识别出一个个的单词符号,其输出结果为单词符号。
语法分析器(又称为分析器),对单词符号串进行语法分析(根据语义规则进行推导和规约),识别出程序中的各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
语义分析和中间代码产生器,按照语义规则对语法分析器规约出(或推导出)的语法单位进行语义分析,并把它们翻译成一定形式的中间代码。
优化器对中间代码进行优化处理。
目标代码生成器将中间代码翻译成目标程序。
表格管理模块保持着一系列的表格,登记源程序的各类信息和编译各阶段的进展情况。编译程序各个阶段所产生的中间结果都记录在表格中,所需要的信息也大多从表格中获取,整个编译过程都在不断的和表格打交道。
出错管理程序对出现在源程序中的错误进行处理。如果源程序有错误,编译程序应设法发现错误,将有关错误信息报告给用户。编译程序的各个阶段都有可能发生错误,出错处理程序要对发现的错误进行处理、记录并反映给用户。
—————————————————————————————————————
编译前端和编译后端
编译前端主要由与源语言有关但与目标机无关的那些部分组成。通常包括词法分析、语法分析、语义分析和中间代码产生和有部分代码优化工作。
编译后段包括编译程序中与目标代码有关的部分,包括与目标机有关的代码优化,以及目标代码的生成等。
—————————————————————————————————————
:对源程序(或其中间形式)从头到尾扫描一次,并进行有关加工处理,生成新的中间形式或最终目标程序,称为一遍。每遍的工作都由从外存上获前一遍的工作结果开始(或源程序),到完成它所包含的有关阶段程序的工作,并把结果记录于外存上为止。
—————————————————————————————————————
计算题型1:地址的转换
三维数组a[2:5,-2:2,5:7]首地址为100,每个数组元素占4个存储单位,给出a[3,1,6]的地址。
Addr=100+((3-2)*(2+2+1)*(7-5+1)+(1+2)*(7-5+1)+6-5)*4=100+100=200
二维数组A[-4:5,-3:3],A的首地址为1000,求A[i,j]和A[i+1,j+1]的地址。
Addr1=1000+((i+4)*(3+3+1)+j+3)*6=1186+42i+6j
Addr2=Addr1+48=1234+42i+6j

 
 

1月10日

10

J2EE答辩OK了,看来还不错。于是计划就调整下咯,先复习要紧。

——————
有时间再来精化J2EE项目

1月11日编译原理复习1/3 第一遍 1-3章
1月12日完成项目、体系结构作业,编译原理复习2/3 第一遍
1月13日完成编译原理第一遍复习;NCE继续,GRE待定
1月14日-1月16日  三天复习编译原理 第二遍;NCE继续,GRE待定
1月18日-21日 四天复习体系结构;NCE继续,GRE待定

——————

WL同学换手机了?

 
 

1月9日

10
今天去浦东送同学了,算是付出了实际行动,没有停留在口头上。去浦东还是很麻烦,公交轻轨地铁加磁浮。
谢谢WL同学的巧克力,非常好吃~
——————–
错误估计任务量和工作效率了,目前看来,能够进行的计划是:
1月10日-11日完成盘点和三个出入库凭证的精化。
1月12日完成软管和体系结构作业。
1月13日-1月16日  四天复习编译原理;NCE继续,GRE待定
1月18日-21日 四天复习体系结构;NCE继续,GRE待定

 
 

1月8日

08
写了平库调账的存储过程。用了游标,没什么问题。
关于hibernate和存储过程配合使用,在调用完以后,要close hibernate的session,使得数据库的更改和hibernate一致。
增加一个功能,指定部门员工和所管辖仓库的对应关系。PS:权限管理的一部分。是否有权限管理这个仓库需要我们自己来做。出入库四张表更改了。还要新建人员仓库对应关系表。
各种各样的人看得多了,道不同不相为谋。坚持自己的原则做人,太功利太自私总不会很好~