第四章 语法分析和语法分析程序(1)
2014-06-16 22:05
281 查看
一个字符串形式的源程序经词法分析之后,即被转换为一串单词符号,且其中的每一单词都按它们的内部形式来编码。
语法分析程序以单词串形式的源程序作为输入或分析的对象。它的基本任务是:根据语言的语法规则(即根据描述该语言的前后文无关文法),分析源程序的语法结构,即分析如何由这些单词组成各种语法范畴(如下标变量、各种表达式、各种语句、程序段或分程序,乃至整个源程序等等),并在分析过程中,对源程序进行语法检査。作为语法分析程序的输出,可以有多种不同的形式。为简便起见,我们假定语法分析程序的输出,是用某种方法表示的语法树。但在很多场合,为了突出分析方法本身的阐述,我们甚至不提及有关输出方面的问题。此外,在讨论语法分析时,我们也基本上不涉及语义方面的问题。
目前,已存在许多语法分析方面的方法。但就产生语法树的方向而言,可大致把它们分为自顶向下和自底向上两大类。以往,最常用的两种方法是分别属于这两个大类的递归下降法(属于自顶向下)和算符优先法(属于自底向上)。前者根据语言中各语法范畴由文法递归定义的特点,用一组相互递归的子程序来完成语法分析;后者则利用各个算符间的优先关系和结合规则来指导语法分析,因而特别适合于分析各种表达式。这两种方法的主要优点是比较简单,便于手工实现。因而过去许多编译程序都或多或少采用过这两种方法。其做法是:对于表达式,常采用算符优先分析法;对于语言的其它部分,则采用递归下降分析法。除了上述两种方法外,还有目前较为流行的LL
分析法(属于自顶向下)和LR分析法(属于自底向上)。它们是目前国内外广泛使用的语法分析程序自动生成工具(如Llama,LLGen,YACC和OCCS等)的基础。
1、自顶向下的语法分析
所谓自顶向下的语法分析,就是对已给的输入符号串w,试图自上而下地为它构造一棵语法树。或者说,从文法的开始符号出发,为w构造一个最左推导。如果上述尝试得到成功,则证明w为相应文法的一个句子;反之,w就不是此文法的句子。
2、自底向上的语法分析
和自顶向下分析过程的方向相反,自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号。由于在进行自底向上的语法分析时,通常所采用的是左归约即规范归约,所以,实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄(即句型中应被最先归约的子串),以及确定将句柄归约为什么非终结符号。依寻找句柄策略的不同,也就形成了不同的自底向上的分析方法。
语法分析程序以单词串形式的源程序作为输入或分析的对象。它的基本任务是:根据语言的语法规则(即根据描述该语言的前后文无关文法),分析源程序的语法结构,即分析如何由这些单词组成各种语法范畴(如下标变量、各种表达式、各种语句、程序段或分程序,乃至整个源程序等等),并在分析过程中,对源程序进行语法检査。作为语法分析程序的输出,可以有多种不同的形式。为简便起见,我们假定语法分析程序的输出,是用某种方法表示的语法树。但在很多场合,为了突出分析方法本身的阐述,我们甚至不提及有关输出方面的问题。此外,在讨论语法分析时,我们也基本上不涉及语义方面的问题。
目前,已存在许多语法分析方面的方法。但就产生语法树的方向而言,可大致把它们分为自顶向下和自底向上两大类。以往,最常用的两种方法是分别属于这两个大类的递归下降法(属于自顶向下)和算符优先法(属于自底向上)。前者根据语言中各语法范畴由文法递归定义的特点,用一组相互递归的子程序来完成语法分析;后者则利用各个算符间的优先关系和结合规则来指导语法分析,因而特别适合于分析各种表达式。这两种方法的主要优点是比较简单,便于手工实现。因而过去许多编译程序都或多或少采用过这两种方法。其做法是:对于表达式,常采用算符优先分析法;对于语言的其它部分,则采用递归下降分析法。除了上述两种方法外,还有目前较为流行的LL
分析法(属于自顶向下)和LR分析法(属于自底向上)。它们是目前国内外广泛使用的语法分析程序自动生成工具(如Llama,LLGen,YACC和OCCS等)的基础。
1、自顶向下的语法分析
所谓自顶向下的语法分析,就是对已给的输入符号串w,试图自上而下地为它构造一棵语法树。或者说,从文法的开始符号出发,为w构造一个最左推导。如果上述尝试得到成功,则证明w为相应文法的一个句子;反之,w就不是此文法的句子。
2、自底向上的语法分析
和自顶向下分析过程的方向相反,自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号。由于在进行自底向上的语法分析时,通常所采用的是左归约即规范归约,所以,实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄(即句型中应被最先归约的子串),以及确定将句柄归约为什么非终结符号。依寻找句柄策略的不同,也就形成了不同的自底向上的分析方法。
相关文章推荐
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- 编写语法分析程序
- C++:基于LL(1)方法的语法分析程序-3
- C++:基于LL(1)方法的语法分析程序-2
- C++:基于LL(1)方法的语法分析程序-1
- 递归下降语法分析程序
- 递归下降语法分析程序设计
- 编译中的基于算符优先分析程序的语法制导翻译
- +递归下降语法分析程序设计
- 递归下降语法分析程序
- 程序中,调用Bison和Flex结合的小例子(语法分析中处理数据)
- 一个基于LL(1)文法的语法分析程序
- 吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】
- 程序中,调用Bison和Flex结合的小例子(语法分析中处理数据)
- PL0语法分析程序(表达式部分)
- antlr指南 第四章 语法分析
- LR(1)表驱动语法分析程序
- 编译原理与技术(第四章)语法分析
- 递归下降语法分析程序设计