编译原理读书笔记之"虎书"

虎书(Tiger book)  英文名:Modern Compiler Implementation in C 
作者:Andrew W.Appel,with Jens Palsberg 

中文名:现代编译原理-C语言描述

现在又有了其它两个语言的版本

Modern Compiler Implementation in JAVA

Modern Compiler Implementation in ML


语法分析

1、LL(k)文法: (用于递归下降分析器。进行自顶向下的语法分析。方法是计算出非终结符的FIRST、FELLOW集,建立预测分析表。左递归消除是必须的

第一个L表示从左到右扫描

第二个L表示最左推导

k表示最多向前使用几个token


LL(0)文法

S --> A

A --> + ID ID

ID --> a

该文法的推导过程不需要知道下一个token就能确定使用哪一个产生式进行推导

示例 +aa 的推导过程

S->A ---> + IDID  --> +aID  -->  +ab


LL(1)文法

产生式一: S --> A | B

产生式二: A --> + ID  ID

产生式三: B -->  - ID  ID

产生式四  :   ID --> a | b

示例 a+b 的推导过程 中 只需要向后搜索一个token 就能判断出来使用产生式三还是产生式四进行推导

预测分析表:

        预测分析表,罗列出在识别

完整示例

文法:
  1.     S->AB

        A->CD

        B->+AB|-AB |ε

        C->ID|num|(S)

        D->*CD| /CD |ε

    构造预测分析表:(如果一个格内有两个产生式,那么就不是LL(1)文法

     

    ID

    num

    (

    )

    +

    -

    *

    /

    #

    S

    S->AB

    S->AB

    S->AB

     

     

     

     

     

     

    A

    A->CD

    A->CD

    A->CD

     

     

     

     

     

     

    B

     

     

     

    B->ε

    B->+AB

    B->-AB

     

     

    B->ε

    C

    C->ID

    C->num

    C->(S)

     

     

     

     

     

     

    D

     

     

     

    D->ε

    D->ε

    D->ε

    D->*CD

    D->/CD

    D->ε

LR(k)


LR(0):每个状态(LR(0)项集要么只包含归约,要么只包含移进,不用向前看token就知道是应该进行归约还是进行移进。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值