FIRST集和FOLLOW集

省略号代表其他相关产生式得出的终结符号,一开始的时候,省略号里面是没有的

求FIRST集

情况壹  如果A只在→的右边出现,那么FIRST(A)={A},例子M→α,FIRST(α)={α}

情况貳  对于A→BCDEFG,

一 如果无B→ε,那么FIRST(A)={……}∪FIRST(B),接着求FIRST(B)

二 如果有B→ε,那么FIRST(A)={……}∪(FIRST(B)-{ε})∪FIRST(CDEFG),接着分别求FIRST(B)-{ε}、FIRST(CDEFG)

情况叁 如果G→ε,那么FIRST(G)={……}∪{ε}

求FOLLOW集

情况壹 如果S是开始符号(一般是第一个产生式),那么FOLLOW(S)={……,$}

情况贰     一 如果有产生式A→αBCD,且ε不属于FIRST(CD)那么FOLLOW(B)={……}∪(FIRST(CD))

二 如果有产生式A→γBCD,且ε属于FIRST(CD)那么FOLLOW(B)={……}∪(FIRST(CD)-{ε})∪FOLLOW(A)

情况叁  如果有产生式M→CDB,那么FOLLOW(B)={……}∪FOLLOW(M)

例子

对于文法G[A]

A→BCc|gDB

B→bCDE|ε

C→DaB|ca

D→dD|ε

E→gAf|c

FIRST集先看→左边

FIRST(A)=FIRST(BCc)∪FISRT(gDB)

=(FIRST(B)-{ε})∪FIRST(Cc)∪{g}

={b}∪FIRST(DaBc)∪FIRST(cac)∪{g}

={b}∪FIRST(dDaBc)∪FIRST(aBc)∪{c}∪{g}

={b,d,a,c,g}

FIRST(B)=FIRST(bCDE)∪FIRST(ε)

={b,ε}

FIRST(C)=FIRST(DaB)∪FIRST(ca)

=FIRST(dDaB)∪FIRST(aB)∪{c}     相当于(FIRST(D)-{ε})∪FIRST(aB)∪{c}

={d,a,c}

FIRST(D)=FIRST(dD)∪FIRST(ε)

={d,ε}

FIRST(E)=FIRST(gAf)∪FIRST(c)={g,c}

-------------------------------------------------------------------------------------------------------

FOLLOW集先看→右边

FOLLOW(A)={$}∪{f}={f,$}

FOLLOW(B)=FIRST(Cc)∪FOLLOW(A)∪FOLLOW(C)

={d,a,c}∪{f,$}∪FOLLOW(C)先去求FOLLOW(C)再来补

={a,c,d,g,f,$}

FOLLOW(C)={c}∪FIRST(DE)

={c}∪{d}∪FIRST(E)

={c,d,g}

FOLLOW(D)=(FIRST(B)-{ε})∪FOLLOW(A)∪FIRST(E)∪{a}∪FOLLOW(D)

={b}∪{f,$}∪{g,c}∪{a}

={a,b,g,c,f,$}

FOLLOW(E)=FOLLOW(B)={a,c,d,g,f,$}

时间: 2024-10-05 18:20:51

FIRST集和FOLLOW集的相关文章

求FIRST集和FOLLOW集

花了点时间弄了个大概,希望对和我一样的人有所帮助. 文法如下: E -> TE'E' -> +TE'|εT -> FT'T' -> *FT'|εF -> (E)|id ---------------------------------------------------------------------------------------------------------------------------------------------------- FIRST集:

FIRST集和FOLLOW集的求法

FIRST集 $FIRST集合$ ------------------------------------------------------------------------ $ S\rightarrow a..., \\a \ \ \in FIRST(S)\\$ ------------------------------------------------------------------------ $S\rightarrow \epsilon, \\ \epsilon \in FI

FIRST集和FOLLOW集求法

    龙书算法: First: (1).如果X是终结符,那么First(X) = X; (2).如果X是非终结符,且XàY1Y2......Yk是一个产生式,其中k>=1;那么如果对于某个I, a在First(Yi)中,且#(空串)在所有的First(Y1)-..First(Yi-1)中,就吧a加入到First(X)中. (3).如果Xà#(空串)是一个产生式,那么将#加入到First(X)中. Follow: (1).将$放入到Follow(S)中,其中S是开始符号,而$是输入右端结束的标记

随机切分csv训练集和测试集

使用numpy切分训练集和测试集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 序言 在机器学习的任务中,时常需要将一个完整的数据集切分为训练集和测试集.此处我们使用numpy完成这个任务. iris数据集中有150条数据,我们将120条数据整合为训练集,将30条数据整合为测试集. iris.csv下载 程序 import csv import os import numpy as np '''将iris.csv中的数据分成train_iris和test_iris两个csv文件,其中t

怎样求FIRST集与FOLLOW集

一,要知道什么是终结符和非终结符. 终结符:通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导. 非终结符:不是终结符的都是非终结符.(非男即女,呵呵) 如:A-->B,则A是非终结符. (一般书上终结符用小写,非终结符用大写.) 二,文法产生语言句子的基本思想:从识别符号(开始符)开始,把当前产生的符号串中的非终结符替换为相应规则右部的符号串,直到全部由终结符组成. 三,FIRST集求法 First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集

将数据划分为训练集和测试集;缩放特征区间

导入葡萄酒数据: 1 import numpy as np 2 import pandas as pd 3 4 df_wine = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", header=None) 5 df_wine.columns = ["class label", "alcohol", 6 "mal

sklearn——train_test_split 随机划分训练集和测试集

sklearn--train_test_split 随机划分训练集和测试集 sklearn.model_selection.train_test_split随机划分训练集和测试集 官网文档:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html 一般形式: train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和

sklearn获得某个参数的不同取值在训练集和测试集上的表现的曲线刻画

from sklearn.svm import SVC from sklearn.datasets import make_classification import numpy as np X,y = make_classification() def plot_validation_curve(estimator,X,y,param_name="gamma", param_range=np.logspace(-6,-1,5),cv=5,scoring="accuracy&

AI - MLCC06 - 训练集和测试集 (Training and Test Sets)

原文链接:https://developers.google.com/machine-learning/crash-course/training-and-test-sets 1- 拆分数据 可将单个数据集拆分为一个训练集和一个测试集. 训练集 - 用于训练模型的子集. 测试集 - 用于测试训练后模型的子集. 训练集的规模越大,模型的学习效果越好.测试集规模越大,对于评估指标的信心越充足,置信区间就越窄.在创建一个能够很好地泛化到新数据模型的过程中,测试集充当了新数据的代理. 拆分数据的一些注意