您的位置:首页 > 其它

第四章 语法分析和语法分析程序(1)

2014-06-16 22:05 281 查看
       一个字符串形式的源程序经词法分析之后,即被转换为一串单词符号,且其中的每一单词都按它们的内部形式来编码。

       语法分析程序以单词串形式的源程序作为输入或分析的对象。它的基本任务是:根据语言的语法规则(即根据描述该语言的前后文无关文法),分析源程序的语法结构,即分析如何由这些单词组成各种语法范畴(如下标变量、各种表达式、各种语句、程序段或分程序,乃至整个源程序等等),并在分析过程中,对源程序进行语法检査。作为语法分析程序的输出,可以有多种不同的形式。为简便起见,我们假定语法分析程序的输出,是用某种方法表示的语法树。但在很多场合,为了突出分析方法本身的阐述,我们甚至不提及有关输出方面的问题。此外,在讨论语法分析时,我们也基本上不涉及语义方面的问题。

       目前,已存在许多语法分析方面的方法。但就产生语法树的方向而言,可大致把它们分为自顶向下和自底向上两大类。以往,最常用的两种方法是分别属于这两个大类的递归下降法(属于自顶向下)和算符优先法(属于自底向上)。前者根据语言中各语法范畴由文法递归定义的特点,用一组相互递归的子程序来完成语法分析;后者则利用各个算符间的优先关系和结合规则来指导语法分析,因而特别适合于分析各种表达式。这两种方法的主要优点是比较简单,便于手工实现。因而过去许多编译程序都或多或少采用过这两种方法。其做法是:对于表达式,常采用算符优先分析法;对于语言的其它部分,则采用递归下降分析法。除了上述两种方法外,还有目前较为流行的LL
分析法(属于自顶向下)和LR分析法(属于自底向上)。它们是目前国内外广泛使用的语法分析程序自动生成工具(如Llama,LLGen,YACC和OCCS等)的基础。

1、自顶向下的语法分析

       所谓自顶向下的语法分析,就是对已给的输入符号串w,试图自上而下地为它构造一棵语法树。或者说,从文法的开始符号出发,为w构造一个最左推导。如果上述尝试得到成功,则证明w为相应文法的一个句子;反之,w就不是此文法的句子。

2、自底向上的语法分析

       和自顶向下分析过程的方向相反,自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号。由于在进行自底向上的语法分析时,通常所采用的是左归约即规范归约,所以,实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄(即句型中应被最先归约的子串),以及确定将句柄归约为什么非终结符号。依寻找句柄策略的不同,也就形成了不同的自底向上的分析方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息