FIRST(a)實際上是壹個字符串的第壹組符號,可以從A中推導出來。FOLLOW(a)是壹組終止符號,在某些句型中可能緊挨著A的右邊。他們有壹個嚴格但難以理解的創作規則:
第壹套解決方案
第壹組最終是針對生產右側的字符串,但關鍵是找到第壹組非終止符。由於第壹組終止符是自身,所以在找到第壹組非終止符後,可以直觀地得到每個字符串的第壹組。
1.直充:對於U形->;a…(其中A是終結符)的產生式,A包含在First(U)中。
2.重復傳輸:對象在U->;P…(其中P是非終結符)的產生式要把First(P)的內容全部轉移到First(U),也就是說只需要轉移第壹個非終結符的first set這個地方是需要註意的地方,也是壹個難點。
跟隨集的解
Follow集合是針對非終結符的,Follow(U)表示句型中非終結符U的所有可能的後終結符的集合,特別是,“#”是識別符號的後終結符。註意,下面的集合是從開始符號s導出的。
1.直接收集:關註生產右半部分“…Ua…”的每壹個組合,直接收集A成Follow(U)。因為a是緊隨u之後的終結者。
2.直接收集:對於形狀為“… up …”的組合(P不是終結),第壹個(P)直接收集到Follow(U)中。這裏,如果第壹個(P)中有空字符,那麽左邊的Follow(S)(假設是S)被發送到Follow(U)中。此外,Follow集合中沒有空字符。
3.直接收集:如果s-->...U,即以U結尾,那麽#∈Follow(U)
4.*重復傳輸:對於U->;...P的產生式(其中P為非終結),Follow(U)中的所有內容都要轉移到Follow(P)中。
這很復雜,但是妳只要記住方法就可以做到。比較好的方法是多做練習,熟練掌握。
我明天要參加編譯考試。求RP,求RP,祝福我~~