zoukankan      html  css  js  c++  java
  • FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造

    FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造

    FIRST集合的简单理解就是推导出的字符串的开头终结符的集合。

    FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符。

    给定一个由终结符和非终结符组成的字符串,FIRST(

    FIRST(

    FOLLOW(X)是可直接跟随与X之后的终结符集合。也就是说,如果存在着任一推导包含Xt,则t∈FOLLOW(X)。当推导包含XYZt,其中Y和Z都推导出时,也有t∈FOLLOW(X)

    FIRST、FOLLOW和nullable的迭代计算

    计算FIRST、FOLLOW和nullable的算法

    将所有的FIRST喝FOLLOW初始为空集合,将所有的nullable初始为false

    for 每一个终结符Z

        FIRST[Z]←{Z}

    repeat

        for 每个产生式X→

            for 每个i从1到k,每个j从i+1到k。

                if 所有都可为空的

                    then nullable[x] ←true

                if 都是可为空的

                    then FIRST[X] ←FIRST[x]∪FIRST[]

                if 都是可为空的

                    then FOLLOW[] ←FOLLOW[]∪FOLLOW[X]

                if 都是可为空的

                    then FOLLOW [] ←FOLLOW[]∪FIRST[]

    until FIRST、FOLLOW和nullable在此轮迭代中没有改变

    例子如下

    第一轮迭代如下

    构造一个预测分析器

    考虑一个递归下降分析器。费终结符X的分析函数对X的每个产生式都有一个子句,因此,该函数必须根据下一个输入单词T来选择其中的一个子句。如果能够为每一个(X,T)选择出正确的产生式,我们就能够写出这个递归下降分析器。我们需要的所有信息可以用一张关于产生式的二维表来表示,此表以文法的非终结符X和终结符T作为索引。这张表称为预测分析表(predictive parsing table)。预测分析表可以由Select集合构造

    Select集合:

    Select集合就是产生式左部的可能的推导结果的起始符号。

    Select(A–>B)就是求这个产生式中A可能推导出起始符号集合(不包含空串ε)。

    求Select集合可分如下几种情况:

    A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X不能推导出空串 ε

    根据定义,显然A推出的符号串起始就是X的起始,也就是First(X).

    Select(A–>X)= First(X)

    A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X能推导出空串ε

    根据定义,显然First(X)属于Select(A–>X),此外,当X推导为空串时,显然A 也推导为空串,那么此时推导出的符号串就会是A后面的符号的推导结果。也就是 Follow(A),所以,此时Follow(A)也属于Select(A–>X)。

  • 相关阅读:
    Java堆栈详解
    JVM 图形化监控工具
    Tomcat 7优化前及优化后的性能对比
    Java 枚举常见7种用法
    GitHub上如何删除repository仓库
    eclipse下使用git上传(下载)代码至(从)github
    标准的软件工程过程之文档标准
    maven添加本地非repository中的jar包
    Junit初级篇
    mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10147140.html
Copyright © 2011-2022 走看看