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

来源:互联网 发布:程序员之路 编辑:程序博客网 时间:2024/05/16 12:53
虎书(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就知道是应该进行归约还是进行移进。



0 0
原创粉丝点击