编译原理消除左递归c语言,编译原理之消除左递归

编程入门 行业动态 更新时间:2024-10-22 13:39:02

编译原理消除左<a href=https://www.elefans.com/category/jswz/34/1771140.html style=递归c语言,编译原理之消除左递归"/>

编译原理消除左递归c语言,编译原理之消除左递归

1.将以下文法消除左递归,分析符号串 i*i+i 。

并分别求FIRST集、FOLLOW集,和SELECT集

E -> E+T | T

T -> T*F | F

F -> (E) | i

消除左递归:

E -> TE'

E' -> +TE' | ε

T -> FT'

T' -> *FT' | ε

F -> (E) | i

分析i * i + i:

FIRST集:

FIRST(E)=FIRST(T)=FIRST(F)={(,i}

FIRST(E’)= {+,ε}

FIRST(E’)= {+,ε}

FIRST(T’)={*,ε}

FOLLOW集:

FOLLOW(E)={),#}

FOLLOW(E')=FOLLOW(E)={),#}

FOLLOW(T)={+,),#}

FOLLOW(T’)= FOLLOW(T)= {+,),#}

FOLLOW(F)= {+,*,) ,#}

SELECT集:

SELECT(E -> TE')={(,i}

SELECT(E' -> +TE')={+}

SELECT(E' -> ε)={),#}

SELECT(T -> FT')={(,i}

SELECT(T' ->*FT' )={*}

SELECT()={T' ->ε}={+,),#}

SELECT( F -> (E))={(}

SELECT()={F ->i}={i}

2.文法改写,并分别求FIRST集、FOLLOW集,和SELECT集

(1) A -> aABe | a

B -> Bb | d

(2) S -> Aa | b

A -> SB

B -> ab

(1)

消除左递归:

A→aA'

A'→ABe| ε

B→dB'

B'→bB' | ε

FIRST集:

FIRST(A)={a}

FIRST(A')={a,ε}

FIRST(B)={d}

FIRST(B')={b,ε}

FOLLOW集:

FOLLOW(A)={d,#}

FOLLOW(A')={d,#}

FOLLOW(B)={e}

FOLLOW(B')={e}

SELECT集:

SELECT(A→aA')={a}

SELECT(A'→ABe)={a}

SELECT(A'→ε)={d,#}

SELECT(B→dB')={d}

SELECT(B'→bB')={b}

SELECT(B'→ε)={e}

更多推荐

编译原理消除左递归c语言,编译原理之消除左递归

本文发布于:2024-02-06 17:32:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:递归   原理   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!