簡體   English   中英

算術表達式的第一個和第二個設置

[英]First & Follow set for Arithmetic Expressions

我想知道我為此語法設定的第一和后續設定是否正確

S -> TS'
S' -> +TS' | -TS' | epsilon
T -> UT'
T' -> *UT' | /UT' | epsilon
U -> VX
X -> ^U | epsilon
V -> (W) | -W | W | epsilon
W -> S | number 

FIRST(S) = FIRST(T) = FIRST(U) = FIRST(V) = FIRST(W) = { ( , - , + , number ,     epsilon } 
FIRST(T') = { *, / , epsilon} 
FIRST(S') = { + , - , epsilon}
FIRST(X) = { ^ , epsilon}

FOLLOW(S) = FOLLOW(S') = FOLLOW(V) = {$}
FOLLOW(T) = {+ , - , $ }
FOLLOW(T')= {+, - , $ }
FOLLOW(U) = FOLLOW(X) = { * , / , + , - ,$ }
FOLLOW(W) = { ) , $ }

只是一句話:

你說:

FIRST(U) = FIRST(V) 

正確,但是V可以是epsilon,這意味着FIRST(U)= FIRST(V)+ FIRST(X)

X可以是epsilon。

這些ε有時有時會令人沮喪。

還有更多要說的。 只是一些規則:-大寫字母是非終結符-小寫字母是終結符-epsilon用於空規則-$用於表示輸入的結尾。

  • 第一(a)= {a}
  • 如果epsilon不在First(A)中,則First(A,B)= First(A)
  • 如果First(A)中的epsilon,則First(A,B)= First(A)+ First(B)
  • First(A | B)= First(A)+ First(B)

  • 如果T是開始符號,則Follow(T)包含$

  • 如果存在帶有..TA。的規則,則Follow(T)包括First(A)。
  • 如果存在規則A-> ..T,則Follow(T)包括Follow(A)
  • 如果存在規則A-> ..TB並且B可以是epsilon,則Follow(T)包括Follow(A)
  • Follow(T)從不包含epsilon

例:

E  = TE'
E' = +TE'|epsilon
T  = FT'
T' = *FT' | epsilon
F = (E) | id

First(E)   = First(T) = First(F) = {(, id}
First(E')  = {+, epsilon}
First(T)   = First(F) = {(, id}
First(T')  = {*, epsilon}
First(F)   = {(, id}

Follow(E)  = {$, )}
Follow(E') = Follow(E) = {$, )}
Follow(T)  = First(E') + Follow(E') = {$, ), +}
Follow(T') = Follow(T) = {$, ), +}
Follow(F)  = First(T') + Follow(T') + Follow(T) = {*, $, ), +}

您的語法要復雜得多,有點怪異(您確定語法中沒有錯誤嗎?),但是您可以遵循規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM