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

  • 10
  • 0
  • 约1.44万字
  • 约 42页
  • 2018-10-19 发布于山东
  • 举报
第4章 自顶向下的分析 主要内容 自顶向下分析概述 递归下降分析算法 First 集合和Follow集合 LL(1)分析 TINY语言的递归下降分析程序 自顶向下分析程序中的错误校正 • 自顶向下(top-down )的分析算法从文法开始符 号开始,不断通过最左推导进行推导,直到推导 出所要分析的符号串为止。 G[E]={E→E+T|T, T→T*F|F, F→(E)|i }, 符号串i+i*i 自顶向下的分析过程: • 自顶向下的分析程序有两类: (1)预测分析程序(predictive parser)试图利用超前 查看一个或多个记号来预测出该选择哪条规则。 (2 )回溯分析程序(backtracking parser)则试着分析 所有的可能输入,当一种可能失败时就要求输入中备份任 意数量的字符。 回溯分析程序的特点:功能强大,但非常慢,一般都在指 数的数量级,所以对于实际的编译器并不合适。 两类预测分析算法: (1)递归下降分析(recursive-descent parsing)很常 用,且最适合于手写的分析程序最为适合。 (2 )LL(1)分析(LL(1) parsing)中第1个“L”指由左向 右地处理输入;第2个“L”指利用最左推导进行分析;括 号中的数字1仅向前查看一个符号进行预测分析。LL(k)分 析利用向前查看k个符号进行预测分析。 主要内容 自顶向下分析概述 递归下降分析算法 First 集合和Follow集合 LL(1)分析 TINY语言的递归下降分析程序 自顶向下分析程序中的错误校正 • 递归下降分析算法:将一个非终结符A 的文法规 则看作将识别A 的一个过程的定义。 • A 的文法规则的右边指出这个过程的代码结构: 一个规则中的终结符和非终结符序列分别与相匹 配的输入和对其他过程的调用相对应,而选择则 与在代码中的替代情况(case(switch)语句和if 语句)相对应。 • 试编写分析如下文法所对应任意串(如acdd )的 分析程序。 G[S]={S→aA|bB A→cdA|d B→efB|f} • 每个非终结符号对应一个分析函数 非终结符号S对应的分析函数 void S(void)//规则S→aA|bB { if (token==‘a’) { match(‘a’);//匹配函数 A( ); } else if (token==‘b’) { match(‘b’);//匹配函数 B( ); } else error( );//出错处理函数 } //S 非终结符号A对应的分析函数 void A(void)//规则A→cdA|d { if (token==‘c’) { match(‘c’);//匹配函数 match(‘d’);//匹配函数 A( ); } else if (token==‘d’) { match(‘d’);//匹配函数 } else error( );//出错处理函数 } //A 非终结符号B对应的分析函数 void B(void)//规则B→efB|f { if (to

文档评论(0)

1亿VIP精品文档

相关文档