4第四章 自顶向下语法分析法2.pdfVIP

  • 1
  • 0
  • 约9.79千字
  • 约 43页
  • 2018-10-19 发布于山东
  • 举报
主要内容 自顶向下分析概述 递归下降分析算法 First 集合和Follow集合 LL(1)分析 TINY语言的递归下降分析程序 自顶向下分析程序中的错误校正 • 试编写分析如下文法所对应任意串(如efbaefb ) 的递归下降分析程序。 G[S]={S→AB A→Ba B→Cb C→ef} void S(void)//规则S→AB { A( ); B( ); } //S void A(void)//规则A→Ba { B( ); match(‘a’); } //A void B(void)//规则B→Cb { C( ); match(‘b’); } //B void C(void)//规则C→ef { match(‘e’); match(‘f’); } //C 例如分析串efbaefb 。由于效率低,因此调用前先找出A开头的符号。 void S(void)//规则S→AB { if (token == A开头的符号){ A( ); B( );} } //S void A(void)//规则A→Ba { B( ); match(‘a’); } //A void B(void)//规则B→Cb { C( ); match(‘b’); } //B void C(void)//规则C→ef { match(‘e’); match(‘f’); } //C • 试编写分析如下文法所对应任意串(如 acefbgh )的递归下降分析程序。 G[S]={S→AB|CD A→aB|dD B→cC|bD C→ef|gh D→i|j} void S(void)//规则S→AB|CD { if (token == ?) { A( ); B( ); } else if (token == ?) { C( ); D( ); } else error( ); } //S void S(void)//规则S→AB|CD { if (token == A开头的符号) { A( ); B( ); } else if (token == C开头的符号) { C( ); D( ); } else error( );//出错处理函数 } //S 先找出A或C开头的终结符号 • 总结 (1)为提高效率 (2 )解决诸如S→AB|CD 的选择问题 有必要求出每一条规则的开头的非终结符 号的所有打头终结符号。这就涉及如何求 解First集合?一般使用归纳法。 • 情况1: G[S]={S→AB A→Ba

文档评论(0)

1亿VIP精品文档

相关文档