ANTLR学习心得——抄书(3)

博客围绕给定文法G产生语言L(G)展开,给出直接推导、句型、句子等基本术语的形式化定义,介绍文法递归类型,阐述文法和语言并非唯一对应关系,引出文法等价概念,并说明利用该概念对文法进行等价变换,以适应分析技术等需求。
  关于给定文法G,如何产生语言L(G),将进一步给出其形式化定义。为此,首先给出一些基本术语的定义。
  ·  定义2.11(直接推导“→”)
  有V=αA β=αγ β=W (α,β,γ∈(VN∪VT)*),当且仅当P中存在一条规则A→Y,称V直接推导出w(或W直接归约到V),记作:V→w。
  ·  定义2.12(直接推导序列)
  如果存在V=a0→a1,a1→a2,...,an-1→an=W或a1→a2→a3→...→an-1→an,则V经过n步(n>0)可以推导出W,记作:v→+w。当v→+W或v=w,记作:v→*w。
  ·  定义2.13(最左(右)推导)
  在推导过程中,总是对句型中的最左(右)边的非终结符进行替换,成为最左(右)推导。
  ·  定义2.14(句型)
  设有文法G[S],若S=*α (α∈(VN∪VT)*),则称α为G[S]的句型。
  ·  定义2.15(句子)
  设有文法G[S],若S=*α (α∈VT*),则称α为G[S]的句子。
  ·  定义2.16(规范推导/规范句型/规范归约)
  最右推导也称为规范推导。仅用规范推导得到的句型称为规范句型,规范推导的逆序为规范归约。
  ·  定义2.17(文法的递归)
  若文法G存在形如αAβ→αAβ'的推导,则称G是递归文法。
  例2.5  设有文法G1:E→E+E|E*E|(E)|i
      有E→E……则文法G1是直接递归文法。
  例2.6  设有文法G2
      T→Qc|c
      Q→Rb|b
      R→Ta|a
  有T→Qc→Rbc→Tabc,即T→Tabc,则文法G2是间接递归文法。
  ·  定义2.18(语言)
  文法G所产生的语言L(G):
  L(G)={α|α∈VT*∧S*→α,S是文法G的开始符号}
  需要指出的是,文法和语言的相互关系并非是惟一对应的,形式语言理论可以证明
  (1)  给定文法G,能从结构上惟一地确定相应的语言。
  (2)  给定一种语言,能确定其文法,但这种文法不是惟—则,即
  L(G1)=L(G2)=...=L(Gn)
  为此,引出文法等价的概念。
  ·  定义2.19(文法等价)
  若L(G1)=L(G2),则称文法G1和G2是等价的。
  文法等价的概念说明,两个文法尽管它们的规则不尽相同,只要所产生的语言相同,则认为这两个文法是等价的。
  例2.7  设有文法G1
    G1={{S},{0},S,{S→S0,S→0}}
  由于存在
    S→S0→S00→S000→...→S0n-1→0n
  则该文法表示的语言为  L(G1)={0n|n>=1}
  设有文法G1',G1'={{S},{0},S,{S→0S,S→0}}
  由于存在  S→0S→00S→000S→...→0n-1S→0n
  则该文法表示的语言为  L(G1')=L(G1')=L(G1)
  很显然,G1≠G1',但却存在L(G1')=L(G1),所以文法G1和G1'等价。
  利用文法等价的概念,当讨论编译程序实现的有关问题的,某种分析技术对文法会有不同程度的限定。当文法不能满足某种分析技术的应用条件时,需要对文法进行等价变换,使之适应相应的分析技术。一般文法等价变换是针对
  *使文法适用于某种分析技术
  *消除文法的二义性
  *使文法类与语言类一致
  *使文法满足特殊需要
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值