LL(1) Грамматика:
(1) Var -> ID DimList
(2) DimList -> ε DimList'
(3) DimList' -> Dim DimList'
(4) DimList' -> ε
(5) Dim -> [ CONST ]
И в сценарии, который я читаю, говорится, что функция FIRST(ε DimList')
дает {#, [}
. Но как?
Я предполагаю, что, поскольку правая часть (2) начинается с ε
, она пропускает эпсилон и принимает FIRST(DimList')
, что, учитывая (3) и (5), равно {[}
, НО также, из-за (4), принимает FOLLOW(DimList')
, что это {#}
.
Иначе это может быть так: поскольку (2) начинается с ε
, он пропускает эпсилон и принимает FIRST(DimList')
, НО ТАКЖЕ берет FOLLOW(DimList) из (2)...
Первый мне кажется более понятным, хотя я все еще изучаю основы грамматики LL(1), поэтому я был бы признателен, если бы кто-то нашел время, чтобы прояснить это, спасибо.
РЕДАКТИРОВАТЬ: И, конечно, может быть, что ни то, ни другое не верно.