Просто замечание:
Вы сказали:
FIRST(U) = FIRST(V)
Что правильно, но, V может быть эпсилоном, что означает ПЕРВЫЙ (U) = ПЕРВЫЙ (V) + ПЕРВЫЙ (X)
И X может быть эпсилон к.
Эти эпсилоны иногда могут быть довольно неприятными.
Есть еще кое-что сказать.
Всего несколько правил:
- Столицы нетерминальные
- строчные терминалы
- эпсилон используется для пустого правила
- $ используется для обозначения конца ввода.
* +1037 * Пример:
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) = {*, $, ), +}
Ваша грамматика намного сложнее и немного странна (вы уверены, что в грамматике нет ошибок?), Но вы можете следовать правилам.