编译原理 —— 算符优先分析法

什么是算符优先分析法

  • 算符优先分析法是一种简单、直观的自下而上分析法
  • 算符优先分析法就是仿照算术表达式的四则运算过程而设计的一种语法分析方法。
  • 这种分析方法首先要规定运算符之间(确切地说终结符之间)的优先关系和结合性质,然后借助这种关系,比较相邻运算符的优先级来确定句型的可归约串并进行归约。
编译原理 —— 算符优先分析法_第1张图片 编译原理 —— 算符优先分析法_第2张图片 编译原理 —— 算符优先分析法_第3张图片 编译原理 —— 算符优先分析法_第4张图片 编译原理 —— 算符优先分析法_第5张图片 编译原理 —— 算符优先分析法_第6张图片 编译原理 —— 算符优先分析法_第7张图片

算符优先文法的定义

一、算符文法的定义

  • 在算符文法中,任何一个规则右部都不存在两个非终结符相邻的情况。如 AB

二、定义任意两个终结符号之间的优先关系

编译原理 —— 算符优先分析法_第8张图片

解释:

(1)ab两个可以同时规约,故优先级相等
(2)将R的推导式代入P的产生式中,最终也会形成如(1)中一样的P的产生式的形式,但此时需要对b先进行规约,再规约a,故a的优先级小于b的优先级
(3)同理可得,b的优先级小于a的优先级

三、算符优先文法的定义
编译原理 —— 算符优先分析法_第9张图片


算符优先关系表的构造

算符优先分析法借助优先关系表寻找句型的可归约串。
编译原理 —— 算符优先分析法_第10张图片

步骤一:为每个非终结符 A 计算 FIRSTVT(A) 和 LASTVT(A)

(1)Firstvt集合

找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:

  • A->a…,即以终结符开头,该终结符入Firstvt
  • A->B…,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
  • A->Ba…,即先以非终结符开头,紧跟终结符,则终结符入Firstvt

(2)Lastvt集合

找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:

  • A->…a,即以终结符结尾,该终结符入Lastvt
  • A->…B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
  • A->…aB,即先以非终结符结尾,前面是终结符,则终结符入Lastvt
编译原理 —— 算符优先分析法_第11张图片

步骤二:逐条扫描文法规则

(1)因存在 E → (E)的规则,则有=
(2)寻找终结符在左边,非终结符在右边的符号对

  • +T 则 +< FIRSTVT(T)
  • *F 则 *< FIRSTVT(F)
  • (E 则 (< FIRSTVT(E)

(3)寻找非终结符在左边,终结符在右边的符号对

  • E+ 则 LASTVT(E)>+
  • T* 则 LASTVT(T)>*
  • E) 则 LASTVT(E)>)

步骤三:寻找$与开始符号E的关系

(1)$=$

(2)$$

编译原理 —— 算符优先分析法_第12张图片

你可能感兴趣的:(编译原理)