返回

自顶向下的语法分析

后端

自顶向下的语法分析简介

自顶向下的语法分析是一种从给定文法的开始符号出发,一步步推导出与给定的目标字符串完全匹配的字符串的语法分析方法。从语法树的角度看,就是从语法树的根S开始,采用从左到右或从右到左的方式,逐步推导出语法树的各个结点。

自顶向下的语法分析方法有很多种,包括递归下降、LL(1)语法、LR(1)语法等。其中,递归下降是最简单的一种自顶向下的语法分析方法,它直接使用文法的产生式来构造语法分析树。LL(1)语法和LR(1)语法都是自顶向下的语法分析方法,但它们都比递归下降更复杂,但它们也更强大。

自顶向下的语法分析方法

自顶向下的语法分析方法有很多种,包括递归下降、LL(1)语法、LR(1)语法等。其中,递归下降是最简单的一种自顶向下的语法分析方法,它直接使用文法的产生式来构造语法分析树。LL(1)语法和LR(1)语法都是自顶向下的语法分析方法,但它们都比递归下降更复杂,但它们也更强大。

递归下降

递归下降是最简单的一种自顶向下的语法分析方法,它直接使用文法的产生式来构造语法分析树。递归下降的步骤如下:

  1. 从文法的开始符号开始,找到一个与输入字符串匹配的产生式。
  2. 将产生式右边的符号压入栈中。
  3. 从栈顶取出一个符号,如果它与输入字符串中的下一个符号匹配,则将其弹出栈,并继续从栈顶取出下一个符号。
  4. 如果栈顶的符号与输入字符串中的下一个符号不匹配,则说明语法分析失败。

LL(1)语法

LL(1)语法是一种自顶向下的语法分析方法,它使用一个称为预测分析表的表格来指导语法分析。预测分析表是一个二维表,它将文法中的非终结符和输入字符串中的符号作为行和列的索引,表中的每个单元格都包含一个产生式。

LL(1)语法分析的步骤如下:

  1. 从文法的开始符号开始,找到一个与输入字符串匹配的产生式。
  2. 将产生式右边的符号压入栈中。
  3. 从栈顶取出一个符号,如果它与输入字符串中的下一个符号匹配,则将其弹出栈,并继续从栈顶取出下一个符号。
  4. 如果栈顶的符号与输入字符串中的下一个符号不匹配,则说明语法分析失败。

LR(1)语法

LR(1)语法是一种自顶向下的语法分析方法,它使用一个称为状态转换表的表格来指导语法分析。状态转换表是一个二维表,它将文法中的状态和输入字符串中的符号作为行和列的索引,表中的每个单元格都包含一个动作。

LR(1)语法分析的步骤如下:

  1. 从文法的开始符号开始,将文法的开始符号压入栈中。
  2. 从栈顶取出一个符号,如果它与输入字符串中的下一个符号匹配,则将其弹出栈,并从状态转换表中找到下一个状态。
  3. 将下一个状态压入栈中。
  4. 继续从栈顶取出符号,并从状态转换表中找到下一个状态,直到栈顶的符号与输入字符串中的下一个符号不匹配。
  5. 如果栈顶的符号与输入字符串中的下一个符号不匹配,则说明语法分析失败。