编译原理基础


    编译原理顾名思义就是处理高级语言,使之成为计算机能够识别的语言(低级语言)的原理。而文法呢?就是用来描述程序设计语言的方法。编译原理中的文法相当于语言学(人类语言)中的语义分析,即分析一个句所表示的含义。它是产生中间代码或目标代码的依据。

 

   以下是对软考视频中的编译原理的简单理解:

       编译原理基础_第1张图片

文法分类:

 

著名语言学家NoamChomsky(乔姆斯基)根据对产生式所施加的限制的不同,把文法分成四种类型,即0型、1型、2型和3型。

 

文法G 定义为四元组(VN ,VT ,P,S)

¨VN :非终结符集

¨VT :终结符集

¨P :产生式集合(规则集合)

¨S :开始符号(识别符号)

注:一般以大写字母表示非终结符,以小写字母表示终结符。

 

0型文法

       限制最少,每个产生式αβ中,α中至少含有一个非终结符(大写字母表示)


1型文法

      对于每个产生式αβ中,都有|β|>=|α|。这里的|β|表示的是β的长度

       举例:如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。 

       注意:虽然要求|β|>=|α|,但有一特例:αε也满足1型文法。

 

2型文法

       每一个αβ都有α是非终结符。如A->Ba,符合2型文法要求。

       举例:Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。

   

3型文法

       它是在2型文法的基础上满足:Aα|αB(右线性)或Aα|Bα(左线性)。

 

       解释:如有:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导为:A->ab,A->aB,B->a,B->cB或推导为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为Aα|αB(右线性)和Aα|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。


关系:


                         编译原理基础_第2张图片

 

 

 

 

语法推导树:

 

举例:

 

已知文法G={ab}{SA},S,P,其中:S->aAS|a;A->SbA|SS|ba.

请构造句型aabAa的推导树。


     编译原理基础_第3张图片


正规式与正规文法之间的转化

 

 

文法产生式

正规式

规则1

AxBBy

A=xy

规则2

AxA|y

A=x*y

规则3

Ax,Ay

A=x|y

 

规则1:由AxBBy,可知:AxBxy

规则2:由AxA|y,可知:AxAAy,依次往下推AxAx2Ax3A……x*Ax*y

规则3Ax,Ay简写成A=x|y

 

 

算符优先:

 

算符优先级的计算


编译原理基础_第4张图片


firstvt积:以终结符开始,或以一个“非终结符+终结符”开始

lastvt积:以终结符结尾,或以“一个终结符+非终结符”结尾

对于算符的优先级计算,只需要使用上图的公式,逐步推导即可!

 

有限自动机(有穷自动机)

 

有限自动机是具有离散输入和输出的系统的一种数学模型。它拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态自动机可以表示为一个有向图

有限自动机分为:NFA不确定的有限自动机,DFAdeterministicfinite automaton)确定的有限自动机


定义

           编译原理基础_第5张图片

             编译原理基础_第6张图片

总结:


    对于编译原理的简单理解,文法只是简单的语法规则,只有转化为表达式才会有实际的计算意义即正规式,而对于有限自动机要想顺利工作,都必须有一个正则式和一个文本串,也就是根据正规式来判断串是否匹配,然后输出!

    对于编译原理这方面知识的学习理解还不是很深刻,如有异议,欢迎交流指导!

 

 



你可能感兴趣的:(编译原理基础)