实验:FIRST & FOLLOW 集合计算
输入文法,自动计算所有非终结符的 FIRST 和 FOLLOW 集合。
Grammar InputFormat:
S -> A B | ε (spaces separate symbols)| Non-Terminal | FIRST | FOLLOW |
|---|---|---|
| E | { (, id } | { $, ) } |
| E' | { +, ε } | { $, ) } |
| T | { (, id } | { +, $, ) } |
| T' | { *, ε } | { +, $, ) } |
| F | { (, id } | { *, +, $, ) } |
Terminals: +, *, (, ), id
Calculation Process (Derivation)
FIRST Set Derivation
- E': Added { + }E' -> ... + ... (First(+) ⊆ First(E'))
- E': Added { ε }E' -> ε
- T': Added { * }T' -> ... * ... (First(*) ⊆ First(T'))
- T': Added { ε }T' -> ε
- F: Added { ( }F -> ... ( ... (First(() ⊆ First(F))
- F: Added { id }F -> ... id ... (First(id) ⊆ First(F))
- T: Added { (, id }T -> ... F ... (First(F) ⊆ First(T))
- E: Added { (, id }E -> ... T ... (First(T) ⊆ First(E))
FOLLOW Set Derivation
- E: Added { $ }Start Symbol
- T: Added { + }E -> ... T E' ... (First(E') ⊆ Follow(T))
- T: Added { $ }E -> ... T ... (Follow(E) ⊆ Follow(T))
- E': Added { $ }E -> ... E' ... (Follow(E) ⊆ Follow(E'))
- F: Added { * }T -> ... F T' ... (First(T') ⊆ Follow(F))
- F: Added { +, $ }T -> ... F ... (Follow(T) ⊆ Follow(F))
- T': Added { +, $ }T -> ... T' ... (Follow(T) ⊆ Follow(T'))
- E: Added { ) }F -> ... E ) ... (First()) ⊆ Follow(E))
- T: Added { ) }E -> ... T ... (Follow(E) ⊆ Follow(T))
- E': Added { ) }E -> ... E' ... (Follow(E) ⊆ Follow(E'))
- F: Added { ) }T -> ... F ... (Follow(T) ⊆ Follow(F))
- T': Added { ) }T -> ... T' ... (Follow(T) ⊆ Follow(T'))