编译器-FOLLOW集合】的更多相关文章

FIRST集合.FOLLOW集合.SELECT集合以及预测分析表地构造 FIRST集合的简单理解就是推导出的字符串的开头终结符的集合. FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符. 给定一个由终结符和非终结符组成的字符串,FIRST( FIRST( FOLLOW(X)是可直接跟随与X之后的终结符集合.也就是说,如果存在着任一推导包含Xt,则t∈FOLLOW(X).当推导包含XYZt,其中Y和Z都推导出时,也有t∈FOLLOW(X) FIRST.FOLLOW和nullable的迭…
FIRST集合 定义 可从α推导得到的串的首符号的集合,其中α是任意的文法符号串. 规则 计算文法符号 X 的 FIRST(X),不断运用以下规则直到没有新终结符号或 ε可以被加入为止 : (1)如果 X 是一个终结符号,那么 FIRST(X) = X. (2)如果 X 是一个非终结符号,且 X ->Y1 Y2 - Yk是一个产生式,其中 k≥1,那么如果对于某个i,a在 FIRST(Y1).FIRST(Y2)- FIRST(Yi-1)中,就把a加入到 FIRST(X) 中. (3)如果 X -…
前面那片文章生成的语法分析表并不是最优的,因为有些项在遇到错误输入的时候,并不是采取报错,而是执行规约,直到不能再规约的时候才报错.这是不科学的,我们需要在得到错误输入的时候立马报错,为了实现这个功能,我们需要知道某个文法符号的后面可能接的终结文法符号的集合,只有当前的输入终结文法符号处在栈顶文法符号的后缀集合中时,我们才去采取接受规约移进这三个操作,否则报错. 为了得到后缀集合,我们首先需要得到每一个文法符号的开始符号集合.为了得到这个集合,我们需要将这些符号进行拓扑排序,以保证生成体的第一个…
FIRST集的定义 : 设G=(VT,VN,P,S)是上下文无关文法 FIRST(a)={a|a=>*ab,a∈VT, a,b∈V*} 若a=>*ε则规定ε∈FIRST (a) FIRST(α)就是从α可能推导出的所有开头终结符号和可能的ε所构成的集合. FIRST集的分析方法 : 对于文法中的符号X∈VN∪VT,其FIRST(X)集合可反复应用下列规则计算,直到其FIRST(X)集合不再增大为止: 1)若 X∈VT,则FIRST(X)={X}. 2)若X∈VN,且具有形如X→aα的产生式(a…
1: package compiler; 2:   3: import java.io.IOException; 4: import java.util.BitSet; 5:   6: /** 7: * 语法分析器. 这是PL/0分析器中最重要的部分, 在语法分析的过程中嵌入了语法错误检查和目标代码生成. 8: * 9: * @author jiangnan 10: * 11: */ 12: public class Praser { 13:   14: /** 15: * 当前符号,由next…
atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结 1. 建立AST 抽象语法树 Abstract Syntax Tree,AST) 1 2. 建立AST 语法树----递归下降(recursive descent)法 2 3. 语法分析概念 2 3.1. 上下文无关语言,非终结符(nonterminal symbol),终结符(terminal symbol).注 2 3.2. 最左推导.当然也有最右推导 3 3.3. 分支预测的…
import hjzgg.first.First; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; public class Follow { private Map<String, Set<Character>> first = null; private Map<St…
/* * 该程序用于计算某个非终结符的 FOLLOW 集合 * RexfieldVon * 2013年6月30日16:02:47 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* 三级指针 * 第一级指向整个产生式组 * 第二级指向单个产生式 * 第三级指向产生式符号单元 * 约定:所有的大写字母为非终结符 * 假设:无左递归.FIRST集中不会出现重复符号 */ char*** Gramm…
一,要知道什么是终结符和非终结符. 终结符:通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导. 非终结符:不是终结符的都是非终结符.(非男即女,呵呵) 如:A-->B,则A是非终结符. (一般书上终结符用小写,非终结符用大写.) 二,文法产生语言句子的基本思想:从识别符号(开始符)开始,把当前产生的符号串中的非终结符替换为相应规则右部的符号串,直到全部由终结符组成. 三,FIRST集求法 First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集…
  语法分析算是最难的一部分了.总而言之,语法分析就是先设计一系列语法,然后再用设计好的语法去归约词法分析中的结果.最后将归约过程打印出来,或者生成抽象语法树. 1. 设计文法 以下是我的文法(引入的M和N是方便以后的语义分析): 1.1.基本框架 Program -> Type main() Block Type -> int | bool Block -> { Stmts return Num ; } Decl -> Type Array ; Array -> Ident…