语法分析-自下而上分析(一)


前言

  语法:语言学的一个分支,研究按确定用法来运用的"词类"、"词"的屈折变化表示相互关系的其他手段以及词在句中的功能和关系。也就是说,语法的意义更多的是用来表达“词”的功能和属性

     语法分析器:将词法分析程序所产生的的单词符号流作为输入串,按一定的规则分析检查是否构成合法的句子,(通俗的点说,在单词没有写错的基础上,检查单词组合是否出现问题)


 

自下而上分析的基本问题

  • 自下而上分析,字面意思从语法树的底部向上分析(也即归约)至语法树的顶部,从而确定语法的正确性。
  • 实现自下而上分析关键问题如何找到“可规约串”,如何判断栈顶的字符串的可归约性及与候选式匹配(自下而上分析是一边输入一边规约的),及实现如下效果:

  

  • 一般对于句子的理解,都是由左向右开始解读,如同生活中阅读一样,同样语法分析只是模拟了这个过程,观察如下图的语法树,其语法为S->xAy,观察的过程即模拟语法分析器的工作过程,从最左边开始逐步向右分析。所以对于语法树能找到最左边的归约项是由为重要的,也即句柄,下面是关于句柄定义的介绍。

    1)短语:对于文法S=>abc,若S=>aAc,且A=+>b,则称b是句型abc相对于非终结符A的短语(语法树中句型不含有”开叉“的非终结符)

    2)直接短语:对于文法S=>abc,若S=>aAc,且A=>b,则称b是句型abc相对于非终结符A的短语

    3)句柄:一个句型最左边的直接短语称之为句柄

运用句柄对句子进行规约:1,短语有,"x*y",”*“。直接短语,“*”,也即句柄。

            2,当识别到“*”时与候选式A->*匹配规约,

            3,规约后识别到字符串xAy时与候选式S->xAy进行匹配规约为S结束。

 

  •  规范规约

a是文法G的一个句子,序列an......a0是a的一个规范规约

对于规范归约而言,最关键的就是确定一个句型的句柄,不同的寻找句柄的算法即不同的规范归约方法

PS:若文法G是无二意的,则规范退到的逆过程必然是规范归约。


 算符优先分析

  • 算符优先分析:规定算符(即终结符)之间的优先顺序和结合性质,借助这种关系寻找“可归约串”。
  • 算符优先文法:一个文法,如果它的任一产生式的右部都不含有两个相继的非终结符,则我们称该文法为算符文法;实际上,真正的算法优先分析方法中,需定义任意两个相继出现的终结符a和b之间的优先关系,一旦确定了这种优先关系,就可以用它来确定“可规约串”进行归纳。
  • 优先级关系

         

        

 

  • 优先关系矩阵

        

  • 构造集合FIRSTVT(P)

  1)若有产生式P->a...或P->Qa...,则a属于FIRSTVT(p)

  2)若a属于FIRSTVT(Q),且有产生式P->Q.....,则a属于FIRSTVT(P)

  • 构造集合LASTVT(R)

  1)若有产生式P->.....a或P->.....aQ,则a属于LASTVT(P)

  2)若有a属于LASTVT(Q),且有产生式P->....Q,则a属于LASRTVT(P)

  • 构造优先表

  1)a同级b,找出所有满足“同级”的终结符对

  2)a优于b,a劣于b:找出满足“优于”和“劣于”的终结符对

(PS:千万别晕,目的都是为了构造ab,或者aQb)

  3)“#”同级“#”;“#”劣于FIRSTVT(开始符号);LASTVT(开始符号)优于“#”。

  • 素短语:至少含有一个终结符,并且除它自身之外不再含更小的素短语。(最左素短语即字面意思)
  • 一个算符优先文法G的任何句型的最左素短语是满足如下条件:aj-1<Njaj....NiaiNi+1>ai+1

算法过程

  • 通过判断移进的字符串是否满足最左素短语的条件进行归约

 

  • 优先函数:利用使每个终结符θ对应两个优先函数f(θ),g(θ)来表达终结符之间的优先关系,从而实现算符优先分析算法。

  优点:便于作比较运算,并且节省存储空间

  缺点:原先不存在优先关系的两个终结符,由于与自然数相对应变成可比较的,因而可能会掩盖输入串的某些错误


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM