zoukankan      html  css  js  c++  java
  • 编译原理 #05# Nonrecursive Predictive Parsing

    // 实验存档

    问题描述

    有如下LL(1)文法

    (1)E->TG

    (2)G->+TG|-TG

    (3)G->ε

    (4)T->FS

    (5)S->*FS|/FS

    (6)S->ε

    (7)F->(E)

    (8)F->i

    E为开始符号,实现一个非递归的预测分析器。

    解决思路

    1、根据以上文法,可知:

    非终结符有E,G,T,S,F(共5个)

    终结符有+,-,*,/,(,),i(加上$共8个)

    用$表示输入终止。

    2、构造一个预测分析表M:

      + - * / ( ) i $
    E                
    G                
    T                
    S                
    F                

    3、对每个产生式求FIRST,并填入预测分析表M的相应位置。

    例如,对于G->+TG|-TG,应该将其拆分为G->+TG和G->-TG,

    因为FIRST(+TG)={+},故将G->+TG填入M[G, +],同理将G->-TG填入M[G, -],

    而对于G->ε,因为FOLLOW(G)={$},故将其填入M[G, $]。

    若对于同一个产生式,求出FOLLOW集合,或者FIRST集合含有多个元素,则将同一个产生式填入表M的多处,

    例如,对于E->TG,FIRST(TG)={(, i},则将该产生式填入M[E, (]和M[E, i]。

    4、填完后是这个样子的:

      + - * / ( ) i $
    E          E->TG    E->TG  
    G  G->+TG  G->-TG            G->ε
    T          T->FS    T->FS  
    S     S->*FS  S->/FS        S->ε
    F          F->(E)    F->i  
  • 相关阅读:
    iTerm2分屏快捷键
    k8s中运维/测试常用的命令整理(随时更新)
    httpRunner自动化测试用例使用笔记
    Git学习笔记-快速上手(mac系统)
    RBAC权限控制逻辑笔记
    CPS中有关CICD的配置
    LDAP中filter的使用
    Docker初级入门
    C语言 实现 HashTable
    从三个线程 排队打印 , 到 多个线程打印
  • 原文地址:https://www.cnblogs.com/xkxf/p/10808851.html
Copyright © 2011-2022 走看看