编译原理文法

1.什么是文法

文法是用于描述语言的语法结构的形式规则。任何一种语言都有它自己的文法,不管它是机器语言还是自然语言。就像自然语言里有主谓宾这样的文法一样,机器语言也有描述它语言构成的特定文法

2.术语解释

终结符非终结符在计算机科学和语言学的领域是用来指定推导规则的元素。在某个形式语法之中,终结符和非终结符是两个不交的集合。

通俗的说,终结符号就是语言中用到的基本元素,一般不能再被分解;
名词,动词,形容词,助词,等等基本语言单位.
非终结符则是"语法"中用到的元素,除非谈论"语法",一般交谈语言中并不会用到非终结符.
比如,主语,短语,词组,句子.
从形式语言中定义看,终结符(T)就是不可再分的字符或串.
而非终结符(N)是一个递归形式的定义:由终结符和至少一个非终结符号组成的串.
产生式:用终结符替代非终结符的规则。

3.文法类型

0型文法


       0型文法也称短语文法,此文法对应于图灵机设G=(VN,VT,P,S),如果它的每个产生式αβ是这样一种结构:α(VNVT)*且至少含有一个非终结符,而β(VNVT)*,则G是一个0型文法。简而言之左边不能是单独的终结符,至少有一个非终结符。例如:

aBb,aB,ab都不是符合0型文法

AaAaBAaBb符合0型文法

 

1型文法

       

        1型文法也叫上下文有关文法,此文法对应于线性界限自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。简而言之0型的基础之上,右侧长度大于或等于左侧长度但是有一个特例,即αε也满足1型文法。

 

2型文法


        2型文法也叫上下文无关文法,它对应于非确定的下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。简而言之1型文法基础之上,左侧都是非终结符,即不存在终结符例如:

Aa,BAaAaBABa等都符合2型文法

AaBAba只符合1型文法,而不符合2型文法

        

       扩展:在左部如果有多个非终结符也算成一个非终结符。


3型文法

  

        3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。简而言之在2型文法基础之上,两个产生式右侧的结构要相同,要么是右线性(即终结符+非终结符),要么是左线性(即非终结符+终结符)例如:

AaBBcD符合3型文法。

AaBBDc不符合3型文法。因为AaB的右侧是:终结符+非终结符;而BDc的右侧是:非终结符+终结符,两者的右侧结构不相同,故而不符合3型文法。


扩展一下,如何判断是否属于3型文法

第一点:左边必须只有一个字符,且必须是非终结符;
第二点:其右边最多只能有两个字符,且当有两个字符时必须有一个为终结符而另一个为非终结符。当右边只有一个字符时,此字符必须为终结符。

第三点:对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。

总结

       


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值