Chapter 4(Part 1):语法分析

4.1 Introduction

语法分析是将词法单元构造成语法树。也与符号表有关

parser
sequence-of-tokens
Syntax-tree

三种语法分析方法:(常用后两者)

  • universal 通用
  • top-down 自顶向下
  • bottom-up 自底向上

错误恢复

  • 恐慌模式:发生错误舍弃后面的输入,直到找到正确token
  • 短语层次恢复:对后面局部性纠正,替换前缀为可能正确的串
  • 错误产生式:构造可能错误语句的产生式,如果符合,进行对应的错误处理
  • 全局纠正:通过最小改动序列,得到全局开销最低纠正方案

4.2 上下文无关文法

non-terminal 非终止符:表示还能替换成其他形式的结构。一般用大写字母或者小写名字标识
terminal 终止符:不能再替换了的符号,一般是运算符、界符、数字
start symbol 开始符:一般是在语法规则第一个,通常是exp或S

产生式

example :

exp -> exp op exp | (exp) | number
-> 左边是结构的名字
-> 右边是由 | 分隔开的由terminal和nonterminal组成的文法符号串(说白了就是语法结构)
这里的意思用大白话说就是,exp可以替换成 exp op exp 或者(exp) 或者 number三种形式

特殊产生式

左递归:A->Aα
右递归:A->αA

推导 derivation

将开始符S(一定是nonterminal),通过产生式的替换,向目标字符串接近,
推导可以证明该句子符合该语法

- 最左推导:优先替换最左边的非终结符
- 最右推导:优先替换最右边的非终结符

4.3 表示语法

二义性语法:存在一个字符串在该语法下有两个不同的最左(右)推导或者语法树
用定义证明语法具有二义性

如何消除二义性:

  1. 优先级越低,放在离开始符越近
  2. 最近嵌套
  3. 结合方向
    左递归产生式的运算符是左结合的,右递归产生式的运算符是右结合的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章