的关键的区别在自顶向下和自底向上之间的解析是自顶向下解析执行从开始符号到输入字符串的解析,而自底向下解析执行从输入字符串到开始符号的解析。此外,自顶向下解析和自底向上解析之间的另一个重要区别是自顶向下解析使用最左的派生,而自底向下解析使用最右的派生。
高级语言帮助编写计算机程序。程序员更容易理解它们,而计算机却不是。因此,高级程序转换为机器代码。的任务编译器是将人类可读的源代码转换为机器可读的机器代码。程序要经过几个步骤才能转换为机器码。这整个过程被称为语言处理系统。其中之一是汇编。语法分析器或解析器位于编译器中,它执行解析任务。
内容
1.概述和主要区别
2.什么是自顶向下解析
3.什么是自底向上解析
4.并排比较-自顶向下和自底向上分析表格形式
5.总结
什么是自顶向下解析?
每种编程语言都有一组规则来表示该语言。语法分析器或解析程序接受输入字符串并检查它是否符合语法结果。换句话说,语法应该使用解析树生成该字符串。
在自顶向下解析中,解析从开始的符号开始,并将到达给定的输入字符串。考虑以下语法生成规则。输入字符串(w)是cad。
S -> cAd
A -> ab / A
执行自顶向下解析后的解析树如下所示。
S产生c A d, A产生A b,弦是cabd。它不是必需的字符串。所以,有必要做回溯,也就是使用其他替代方案。
类似地,S产生c A d。对A应用另一个选项将得到A。现在它给出了所需的字符串。因此,解析器接受这个输入字符串。执行自顶向下解析后的解析树如下所示。
当输入字符串(w)为abbcde时
考虑以下语法生成规则。
S -> aABe
A -> Abc/b
B -> d
在自顶向下解析中,
S -> aABe(代入A -> Abc)
S -> aAbcBe(替换A -> b)
S -> abbcBe(替换B ->d)
S -> abbcde
替换首先从最左边的变量开始,然后到右边的下一个位置,以此类推。因此,它遵循最左的求导方法。此外,当存在变量时,决定选择什么产生式规则是很重要的。
什么是自底向上解析?
在自底向上的解析中,则以另一种方式进行。解析从输入字符串到开始符号。考虑以下语法生成规则,并设输入字符串为wɛcad
S -> cAd
A -> ab / A
执行自底向上解析后的解析树如下所示。
给定的字符串是cad。a由a生成,c、a和d结合得到起始符号S。
当输入字符串(w)为abbcde时
考虑以下语法生成规则。
S -> aABe
A -> Abc/b
B -> d
在自底向上解析中,
S -> aABe(代入B ->d)
S -> aAde(替换A -> Abc)
S -> aAbcde(替换A -> b)
S -> abbcde
替换首先从最右边的变量开始,然后移动到下一个左边的位置,以此类推。因此,它遵循一种左动求导方法。
自顶向下解析和自底向上解析的区别是什么?
自顶向下解析是一种解析策略,它首先查看解析树的最高级别,然后使用形式语法的规则向下解析树。自底向上解析是一种解析策略,它首先查看解析树的最低级别,然后使用形式语法的规则向上解析树。在自顶向下解析中,从开始符号到输入字符串进行解析。另一方面,在自底向上解析中,从输入字符串到开始符号进行解析。
此外,自顶向下解析的主要决策是选择使用什么产生式规则来构造字符串,而自底向下解析的主要决策是选择何时使用产生式规则来缩减字符串以获得起始符号。此外,自顶向下解析使用最左的派生,自底向下解析使用最右的派生。
摘要-自顶向下vs自底向上解析
自顶向下解析和自底向上解析的区别在于,自顶向下解析执行从开始符号到输入字符串的解析,而自底向下解析执行从输入字符串到开始符号的解析。
参考:
1.编译器设计第5讲-解析器介绍和LL(1)解析编译器设计第5讲-解析器和LL(1)解析,拉文德拉巴布·拉武拉的《大门讲座》,2014年5月22日。可以在这里
留下回复