您现在的位置是:首页计算机应用论文

计算机理论论文RG识别关键技术钻研

发布时间:2013-11-12 16:14:42更新时间:2013-11-12 16:15:11 1

  摘要:RG是形式语言中最典型的一类文法。主要讨论和分析了RG的一种识别分析方法,给出了该方法的主要算法及实现的关键技术。对文法识别和自动机生成有决定性的作用。可给后续研究提供支持。

  关键词:RegularGrammar,识别,自动机

  1引言

  乔姆斯基把文法分成四种类型,即0型、1型、2型和3型。这几类文法的差别在于对产生式施加不同的限制。设G=(VN,VT,P,S),若P中的每一个产生式的形式都是A→Ba或A→a,其中A和B都是非终结符,a是终结符,则G是3型文法或正规文法,即RG.RG又有左线性和右线性之分,即右部为“Ba”则为左线性,为“aB”则为右线性,本文仅以左线性情形,右线性情形就不赘述。

  本文是在设计了一个识别输入文法是否为RG的软件的基础上,着重对基本原理和关键技术做研究和分析,给出了一种识别方法的原理,在更好的加深巩固形式语言这一重要理论的同时,使得该理论更紧密的与实践相联系。

  2相关定义及理论

  定义2.1文法与自动机等价

  根据形式语言理论,三型文法产生的语言是有穷自动机(FA)所接受的串集合。可以给出3型文法和相应识别系统FA间的转换规则。

  采用下面的规则可从正规文法G(假定G为右线性文法)直接构造一个有穷自动机NFAM;使得L(M)=L(G):?

  ①字母表与G的终结符集相同;

  ②为G中的每个非终结符生成M的一个状态,(不妨取成相同的名字)G的开始符号S是开始状态S;

  ③增加一个新状态Z,做为NFA的终态;

  ④对G中的形如A→tB其中t为终结符或ε,A和B为非终结符的产生式,构造M的一个转换函数f(A,t)=B;

  ⑤对G中形如A→t的产生式,构造M的一个转换函数f(A,t)=Z。

  定义2.2NFA的确定化

  在有穷自动机的理论里,有这样的定理:设L为一个由不确定的有穷自动机接受的集合,则存在一个接受L的确定的有穷自动机。将NFA转换成接受同样语言的DFA的算法称为子集法。详细证明可查阅参考文献[1]。

  3文法的识别主要算法分析

  识别的关键是对所输入的符号串的格式上的判断,左部需要满足为单个的大写英文,而右部应是单个小写或是一个小写和一个大写的组合,只有这样才满足RG的要求,此处给出对右部的进行识别的部分主要过程。

  if(rlen==1)

  {

  charva=rs.GetAt(0);

  findvalue(va,End,C);

  rlen=-1;

  }

  以上算法是对文法右部的检查,即判断右部为单个小写的情况.

  if(rlen==2)

  {

  charVT1=rs.GetAt(0);

  charVT2=rs.GetAt(1);

  intfa=0;

  while(fa<=maxlen)

  {

  if(fa==maxlen)

  {D=0;fa++;}

  else

  {

  if(VT1==Noend[fa].value)

  {

  intfb=0;

  while(fb<=maxlen)

  {

  if(fb==maxlen){D=0;fb++;fa=maxlen+1;}

  else

  {

  if(VT2==End[fb].value)//是终结符号:

  {fb=maxlen+1;fa=maxlen+1;}//检查全部完毕:

  else{fb++;}

  }

  }

  }

  else{fa++;}

  }

  以上是对小写加大写的情况的分析。对经过判断后的文法存储,便可由接下的步骤完成文法到自动机的转换。这样就完成了一个较为完整的RG识别过程。

  4结论

  本文主要根据RG的特点,在设计了一个识别过程的基础上,完成文法判断及到自动机的转换。希望能够对词法分析的初学者提供一些帮助。下步待继续的工作是在自动机的基础上完成对输入句子的运行识别.

  参考文献:

  [1]张幸儿.计算机编译原理[M].2版.北京:科学出版社,2003:31-34.

  [2]陈火旺,等.程序设计语言编译原理[M].3版.北京:国防工业出版社,2000:34-35.

  [3]王育坚.VC++面向对象编程教程[M].北京:清华大学出版社,2003.


转载请注明来自:http://www.yueqikan.com/jisuanjiyingyonglw/23826.html