编译原理语法分析_斯坦福大学《编译原理》学习记录 - 第二章:语法分析器

05-01: Introduction to Parsing 语法分析

parser的作用:

3cac86df465cff15e4f779abf61725cb.png

05-02: Context Free Grammars 上下文无关文法

CFG(上下文无关文法)回答了一个字符串是否属于某语言:

CFG的组成:

  1. 终止符
  2. 非终止符
  3. 开始符
  4. 生成式

生成式production (非终止符non-terminal -> 终止符terminal)

b54e4cdabaed747790be6f106852b688.png

05-03: Derivations 推导

  • 推导是一系列生成
  • 推导可以用树的形式表示
  • 一个推导可以定义一棵语法树,但是一棵语法树可以定义不同的推导

b7e7e24b31f6ec2d2f6e77c9c7d96bfe.png
  • 最左推导和最右推导定义同一棵语法树

05-04: Ambiguity

Ambiguity:一个字符串对应多个语法树

避免二义性:

方法1:左递归写法

方法2:用Bison中的%定义

06-01: Error Handling

方法1:panic mode

skip input and try to continue

方法2:error production

specify known common mistakes in the grammar

方法3:error correction

try token insertions and deletion

06-02: Abstract Syntax Trees

  • AST:

b30bf81cec64622222055406b7e36eaf.png

06-03: Recursive Descent Parsing 递归下降语法分析

Recursive Descent 是一种通用的语法分析算法。

输入:token串

Recursive Descent :判断是否符合该(上下文无关)语言语法,并构建语法树

06-04: Recursive Descent Algorithm

递归下降具体算法:

从开始符号起,依次递归尝试每一个产生式。若返回匹配,且遍历到字符串末尾,则成功。

ccdc6093c38af59da1b82503200a355a.png

06-04-1: Recursive Descent Limitations

使用Recursive Descent做语法分析时,需转化左递归文法。

左递归文法是形如 S->Sa 的文法

左递归文法会导致无限循环。因为它本质上是从右到左推导的。而递归下降算法是从左到右推导的。

b6309057113a9128230739d00b460450.png

06-05: Left Recursion

将左递归文法转换为右递归文法的方法:

4a6084adc1659948bd850d9a4cd3da81.png

隐式左递归文法

25fcce08e6634a7d05825906813ef30d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值