词条 | 简单优先文法 |
释义 | 计算机编程编译程序的工作过程通常是词法分析、语法分析、语义分析、代码生成、代码优化。编译程序的这些过程的执行先后就构成了编译程序的逻辑结构,但是这些逻辑结构不一定是按照某一个固定顺序的,也有可能是按照平行或者互锁的方式执行的。 简单优先分析文法的基本思想是对一个文法按一定的原则求出该文法所有符号包括终结符和非终结符之间的优先关系,按照这种关系确定规约过程中的句柄,它的规约过程实际上是规范规约。在算法实现过程中,主要使用visual C++进行编程。 简单优先分析方法·一种shift-reduce分析方法 ·根据文法符号的优先关系确定句柄 ·文法符号的优先关系的确定 简单优先分析中的三种关系 X≌Y :当且仅当存在一个产生式A→…XY…X<|Y :当且仅当存在一个产生式A→…XB… 并有B=>Y…。X|>Y :当且仅当存在一个产生式A→…BC… 并有B=>…X,C=>Y…。 文法G为简单优先文法如果满足:对于任意两个语法符号X和Y,至多成立一种 优先关系;任意两个产生式都具有不同的右部。 文法优先关系的确定 FIRST(W) ={S | W=>S…,S∈(VN∪VT)}LAST(W) ={S | W=>…S,S∈(VN ∪VT)} 若有U→…SiSj…: 则有Si ≌ Sj ;若有U→…SiW…:则有Si<|Sj,且Sj∈FIRST(W)若有U→…VW…:则有Si|>Sj ,且Si∈LAST(V), Sj∈(FIRST(W)∪{W})。 输入流的结束标志 ‘#’,文法的开始符为Z,#<|S,S∈FIRST(Z); 且#<|Z S|>#,S∈LAST(Z); 且Z|># 简单优先分析算法要点 找第一个使Sj|>Sj+1的Sj从Sj开始往前(左)找第一个使Si-1<|Si的Si用SiSi+1…Sj去查产生式的右部,并用相应的左部符号代替句柄SiSi+1…Sj (归约) 。重复上述过程,直至输入符结束。如果归约出文法的开始符号则成功。否则失败。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。