S-> SS+ | SS* | a 实现递归下降语法分析或预测分析,合法的输入串输出“Yes”;不合法的输出“No”,并输出错误位置信息。在每次推导时输出文法信息,以验证(观察)语法分析过程。
时间: 2024-02-09 14:07:24 浏览: 58
好的,这是一个稍微复杂一些的文法。我们同样可以使用递归下降分析法或预测分析法来分析它。
首先,我们需要构造该文法的预测分析表。表中的行表示非终结符,列表示终结符,每个表格中的内容表示要使用的产生式编号。
| | + | * | a | $ |
| - | -- | -- | -- | -- |
| S | 1 | 2 | 3 | |
接下来,我们可以根据这个表来进行预测分析。假设我们要分析的输入串是"a+*a"。
首先,我们把起始符号S压入栈中。然后读入输入串的第一个字符"a",查找预测分析表中S和"a"的交叉格子,发现使用的是产生式3。于是我们将栈中的S弹出,压入"a",即栈中变为了"a"。
接下来读入输入串的第二个字符"+",此时我们需要对S进行展开。我们查找预测分析表中S和"+"的交叉格子,发现使用的是产生式1。于是我们将栈中的S弹出,压入产生式1右边的符号序列"SS+",即栈中变为了"+", "S", "S", "a"。
接下来读入输入串的第三个字符"*",此时我们同样需要对S进行展开。我们查找预测分析表中S和"*"的交叉格子,发现使用的是产生式2。于是我们将栈中的S弹出,压入产生式2右边的符号序列"SS*",即栈中变为了"*", "S", "S", "+", "a"。
接下来读入输入串的第四个字符"a",查找预测分析表中S和"a"的交叉格子,发现使用的是产生式3。于是我们将栈中的S弹出,压入"a",即栈中变为了"a", "S", "S", "+", "a", "S", "S", "*".
最后,读入输入串的结束符"$",此时栈中还剩下多个符号,说明输入串不合法,输出"No"并输出错误位置信息。
整个分析过程中,我们可以不断输出使用的产生式,以验证语法分析过程。
阅读全文