ВУЗ:
Составители:
32
6 Лабораторная работа № 6. Моделирование функциониро-
вания распознавателя для LL(1)-грамматик
Цель: - закрепить понятие «LL(k) –грамматика», необходимые и доста-
точные условия LL(k) –грамматики;
- сформировать умения и навыки построения множеств FIRST(k,
α
)
и FOLLOW(k,
α
), распознавателя для LL(1)-грамматик.
Основы теории
Определение 6.1. КС-грамматика обладает свойством LL(k) для некото-
рого k>0, если на каждом шаге вывода для однозначного выбора очередной
альтернативы МП-автомату достаточно знать символ на верхушке стека и рас-
смотреть первые k символов от текущего положения считывающей головки во
входной строке.
Определение 6.2. КС-грамматика называется LL(k)-грамматикой, если
она обладает свойством LL(k) для некоторого k>0.
В основе распознавателя LL(k)-грамматик лежит левосторонний разбор
строки языка. Исходной сентенциальной формой является начальный символ
грамматики, а целевой – заданная строка языка. На каждом шаге разбора пра-
вило грамматики применяется к самому левому нетерминалу сентенции. Дан-
ный процесс соответствует построению дерева разбора цепочки сверху вниз (от
корня к листьям). Отсюда и произошла аббревиатура LL(k): первая «L» (от сло-
ва «left») означает левосторонний ввод исходной цепочки символов, вторая «L»
- левосторонний вывод в процессе работы распознавателя.
Определение 6.3. Для построения распознавателей для LL(k)-грамматик
используются два множества:
-
FIRST(k,
α
) – множество терминальных цепочек, выводимых из цепоч-
ки
α
∈(V
T
∪V
N
)*, укороченных до k символов;
-
FOLLOW(k, A) – множество укороченных до k символов терминальных
цепочек, которые могут следовать непосредственно за A∈V
N
в цепочках вывода.
Формально эти множества можно определить следующим образом:
-
FIRST(k,
α
) = {
ω
∈ V
T
* | ∃ вывод
α
⇒*
ω
и |
ω
| ≤ k или ∃ вывод
α
⇒*
ω
x
и |
ω
| = k; x,
α
∈ (V
T
∪V
N
)*, k > 0};
-
FOLLOW(k, A) = {
ω
∈V
T
* | ∃ вывод S⇒*
α
A
γ
и
ω
∈FIRST(k,
γ
);
α
,
γ
∈V*,
A∈V
N
, k>0}.
Теорема 6.1. Необходимое и достаточное условие LL(1)-грамматики
Для того чтобы грамматика G(V
N
, V
T
, P, S) была LL(1)-грамматикой необ-
ходимо и достаточно, чтобы для каждого символа А∈V
N
, у которого в грамма-
тике существует более одного правила вида А→α
1
| α
2
|…| α
n
,
выполнялось тре-
бование:
FIRST(1, α
i
FOLLOW(1, A)) ∩ FIRST(1, α
j
FOLLOW(1, A)) = ∅,
6 Лабораторная работа № 6. Моделирование функциониро- вания распознавателя для LL(1)-грамматик Цель: - закрепить понятие «LL(k) –грамматика», необходимые и доста- точные условия LL(k) –грамматики; - сформировать умения и навыки построения множеств FIRST(k, α) и FOLLOW(k, α), распознавателя для LL(1)-грамматик. Основы теории Определение 6.1. КС-грамматика обладает свойством LL(k) для некото- рого k>0, если на каждом шаге вывода для однозначного выбора очередной альтернативы МП-автомату достаточно знать символ на верхушке стека и рас- смотреть первые k символов от текущего положения считывающей головки во входной строке. Определение 6.2. КС-грамматика называется LL(k)-грамматикой, если она обладает свойством LL(k) для некоторого k>0. В основе распознавателя LL(k)-грамматик лежит левосторонний разбор строки языка. Исходной сентенциальной формой является начальный символ грамматики, а целевой – заданная строка языка. На каждом шаге разбора пра- вило грамматики применяется к самому левому нетерминалу сентенции. Дан- ный процесс соответствует построению дерева разбора цепочки сверху вниз (от корня к листьям). Отсюда и произошла аббревиатура LL(k): первая «L» (от сло- ва «left») означает левосторонний ввод исходной цепочки символов, вторая «L» - левосторонний вывод в процессе работы распознавателя. Определение 6.3. Для построения распознавателей для LL(k)-грамматик используются два множества: - FIRST(k, α) – множество терминальных цепочек, выводимых из цепоч- ки α∈(VT∪VN)*, укороченных до k символов; - FOLLOW(k, A) – множество укороченных до k символов терминальных цепочек, которые могут следовать непосредственно за A∈VN в цепочках вывода. Формально эти множества можно определить следующим образом: - FIRST(k, α) = {ω ∈ VT* | ∃ вывод α ⇒*ω и |ω| ≤ k или ∃ вывод α ⇒*ωx и |ω| = k; x, α ∈ (VT∪VN)*, k > 0}; - FOLLOW(k, A) = {ω ∈VT* | ∃ вывод S⇒*αAγ и ω∈FIRST(k, γ); α, γ∈V*, A∈VN, k>0}. Теорема 6.1. Необходимое и достаточное условие LL(1)-грамматики Для того чтобы грамматика G(VN, VT, P, S) была LL(1)-грамматикой необ- ходимо и достаточно, чтобы для каждого символа А∈VN, у которого в грамма- тике существует более одного правила вида А→α1 | α2 |…| αn, выполнялось тре- бование: FIRST(1, αiFOLLOW(1, A)) ∩ FIRST(1, αjFOLLOW(1, A)) = ∅, 32
Страницы
- « первая
- ‹ предыдущая
- …
- 30
- 31
- 32
- 33
- 34
- …
- следующая ›
- последняя »