编译原理试题

发布 2024-04-16 18:10:09 阅读 1667

语法分析——自顶向下的分析。

重点与难点。

重点:自顶向下分析的基本思想,**分析器总体结构,**分析表的构造,递归下降分析法基本思想,简单算术表达式的递归下降分析器。

难点:first和follow集的求法,对它们的理解以及在构造ll(1)分析表时的使用。递归子程序法中如何体现分析的结果。

基本要求。掌握语法分析、2型文法的概念和自顶向下分析的基本思想,**分析器总体结构,**分析表的构造,递归下降分析法基本思想,简单算术表达式的递归下降分析器。

熟练掌握推导、first集和follow集的求法、消除左递归、提取左因子、ll(1)文法、文法的改写、递归子程序法、**分析法。

例题解析。例1求表达式文法的语法符号的first集和follow集表达式文法:e→te'e'→+te|εt→ft't'→*ft|εf→(e)|id

first(f)=

first(t)=first(f)=first(e)=first(t)=first(e')=first(t')=

first(+)first(*)first( (first( )first(id)=

follow(e

follow(e')=follow( e

follow(t) =first(e)∪follow(e)∪follow(efollow(t')=follow(t

follow(f) =first(t)∪follow(t)∪follow(t

例2消除下述文法的左递归。s→ac|ca→bb|bb→sa|a【解】先将间接左递归,变成直接左递归。

将b的定义代入a产生式得:a→sab|ab|b,将a的定义代入s产生式得: s→sabc|abc|bc|c采用引进新的非终结符的方法消除直接左递归:

s→abcs|bcs|css→abcs|ε

删除“多余的”产生式:a→sab|ab|b和b→sa|a

得到文法g[s]:s→abcs|bcs|css→abcs|ε

例3已知文法g:s→(l|al→s,l|)

1)构造文法g的**分析表。(2)若输入串为“(a请给出语法分析过程。【解】(1

1)求各非终结符的fisrt集和follow集:first(s) =first(sa }follow(sfollow(l) =follow(s2)**分析表:

sls→( ll→s , l

as→al→s , ll→)#

2)对输入串“(a的分析处理过程如表1所示。

表1对输入串“(a的分析过程。

步骤012分析栈#s#l(#l#l, s#l, a#l,#l#)#

输入串。所用产生式s→( l

l→s , ls→al→)

例4给定文法其中1)消除左递归;

2)计算改写后文法中各非终结符的first集和follow集;(3)构造改写后文法的**分析表;该文法是ll(1)文法吗?。【解】

1)消除左递归后的文法为:e→iae'eae'a→ia→da→( e )

2)各非终结符的fisrt集和follow集first( e )

firstfirst( afollow( e ) #

followfollow( a3)改写后文法的**分析表:ee'a

a→(e)#e→

e→iae'a→i

a→d'→ae'eae'eae'e→

**分析表中无多重入口,因此该文法是ll(1)文法。

例5 if语句的原始文法。

s→if e then s |if e then s else s |other

存在左因子if e then s,改写此文法消除左因子。.【解】引进非终结符ss'→εelse s提取左因子:s→if e then ss|other改写后的文法:

s→if e then ss|other

s'→εelse s

例6构造简单算术表达式的分析器【解】e的子程序(e→t(+t)*)procedure e;begin

t;t的过程调用while lookhead='+dobegin当前符号等于+时match(+)处理终结符+tt的过程调用endend;lookhead:当前符号。

t的子程序(t→f(*f)*)procedure t;begin

f;f的过程调用while lookhead='*thenbegin当前符号等于*时match('*处理终结符*ff的递归调用endend;

f的子程序(f→(e)|id)procedure f;begin

if lookhead='(thenbegin当前符号等于(match('(处理终结符(e;e的递归调用。

match(')处理终结符)end

else if lookhead=id thenmatch(id)处理终结符idelse error出错处理end

主程序。begin

lookhead:=nexttoken;调词法分析程序ee的过程调用end

服务子程序。

procedure match(t:token);begin

if lookhead=tthen

lookhead:=nexttokenelse error出错处理程序end;

编译原理试题

编译原理模拟试题。班级姓名学号。1 20分 写出字母表 上语言l 的正规式,并画出接受该语言的最简dfa。2.10分 计算文法g m 的每个非终结符的first和follow集合,并判断该文法是否是ll 1 的,请说明理由。g mm tb t ba b db et d d 3.10分 写一个文法使其...

编译原理试题

东南大学。一 文法g1 e et t t tf f f fp p p e i1 试证明符号串tet i 是g1的一个句型 要求画出语法树 2 写出该句型的所有短语,简单短句和句柄。三 1 试写出一个上下文无关文法g3,它能产生配对的圆括号串 例如等,甚至包含0对括号 2 使用文法g3给出输入串 的自...

编译原理试题

1 最左简单子树的末端结点构成的符号串称为 2 若一个文法是递归的,则它产生的句子个数是 3 在通常的语法分析方法中,特别适用于表达式的分析。4 后缀式ab cd 可用表达式来表示。5 下面不是常见的中间语言表示形式是 6 文法分为四种类型,即0型 1型 2型 3型。其中3型文法是 7 表达式a b...