https://en.wikipedia.org/wiki/LR_parser … tween_them
Ситуация - это Earley Item, то есть запись некоего правила с точкой (Earley Dot = •) внутри него
Группа ситуаций - несколько ситуаций, по каким-то причинам объединённых в одну группу.
Итак, составим список групп ситуаций (он же будет списком состояний ДКА).
Состояние {1}
$accept -> • н1 $кон
+ н1 -> • н2
+ н1 -> • н3
+ н2 -> • н4
+ н2 -> • н2 т1 н4
+ н2 -> • н2 т2 н4
+ н3 -> • н5
+ н3 -> • н3 т1 н4
+ н3 -> • н3 т2 н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н5 -> • т2 н6
+ н5 -> • н5 т3 н6
+ н5 -> • н5 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т2{2}, т5{3}, т7{4}, н1{5}, н2{6}, н3{7}, н4{8}, н5{9}, н6{10}
Состояние {2}
н5 -> т2 • н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н6{11}
Состояние {3}
н6 -> т5 • н1 т6
+ н1 -> • н2
+ н1 -> • н3
+ н2 -> • н4
+ н2 -> • н2 т1 н4
+ н2 -> • н2 т2 н4
+ н3 -> • н5
+ н3 -> • н3 т1 н4
+ н3 -> • н3 т2 н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н5 -> • т2 н6
+ н5 -> • н5 т3 н6
+ н5 -> • н5 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т2{2}, т5{3}, т7{4}, н1{12}, н2{6}, н3{7}, н4{8}, н5{9}, н6{10}
Состояние {4}
н6 -> т7 •
Состояние {5}
$accept -> н1 • $кон
Состояние {6}
н1 -> н2 •
н2 -> н2 • т1 н4
н2 -> н2 • т2 н4
Следующие символы: т1{14}, т2{15}
Состояние {7}
н1 -> н3 •
н3 -> н3 • т1 н4
н3 -> н3 • т2 н4
Следующие символы: т1{22}, т2{23}
Состояние {8}
н2 -> н4 •
н4 -> н4 • т3 н6
н4 -> н4 • т4 н6
Следующие символы: т3{17}, т4{18}
Состояние {9}
н3 -> н5 •
н5 -> н5 • т3 н6
н5 -> н5 • т4 н6
Следующие символы: т3{26}, т4{27}
Состояние {10}
н4 -> н6 •
Состояние {11}
н5 -> т2 н6 •
Состояние {12}
н6 -> т5 н1 • т6
Следующие символы: т6{13}
Состояние {13}
н6 -> т5 н1 т6 •
Состояние {14}
н2 -> н2 т1 • н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н4{16}, н6{10}
Состояние {15}
н2 -> н2 т2 • н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н4{21}, н6{10}
Состояние {16}
н2 -> н2 т1 н4 •
н4 -> н4 • т3 н6
н4 -> н4 • т4 н6
Следующие символы: т3{17}, т4{18}
Состояние {17}
н4 -> н4 т3 • н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н6{19}
Состояние {18}
н4 -> н4 т4 • н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н6{20}
Состояние {19}
н4 -> н4 т3 н6 •
Состояние {20}
н4 -> н4 т4 н6 •
Состояние {21}
н2 -> н2 т2 н4 •
н4 -> н4 • т3 н6
н4 -> н4 • т4 н6
Следующие символы: т3{17}, т4{18}
Состояние {22}
н3 -> н3 т1 • н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н4{24}, н6{10}
Состояние {23}
н3 -> н3 т2 • н4
+ н4 -> • н6
+ н4 -> • н4 т3 н6
+ н4 -> • н4 т4 н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н4{25}, н6{10}
Состояние {24}
н3 -> н3 т1 н4 •
н4 -> н4 • т3 н6
н4 -> н4 • т4 н6
Следующие символы: т3{17}, т4{18}
Состояние {25}
н3 -> н3 т2 н4 •
н4 -> н4 • т3 н6
н4 -> н4 • т4 н6
Следующие символы: т3{17}, т4{18}
Состояние {26}
н5 -> н5 т3 • н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н6{28}
Состояние {27}
н5 -> н5 т4 • н6
+ н6 -> • т7
+ н6 -> • т5 н1 т6
Следующие символы: т5{3}, т7{4}, н6{29}
Состояние {28}
н5 -> н5 т3 н6 •
Состояние {29}
н5 -> н5 т4 н6 •
Теперь можно составить пару таблиц (состояния x терминальные символы, состояния x нетерминалы) и начать рубить код на КуМир'е
http://ict.edu.ru/ft/005128/ch7.pdf, страница 5
Управляющая программа выглядит следующим образом:
Установить ip на первый символ входной цепочки w$;
while (цепочка не закончилась)
{
Пусть s – состояние на вершине магазина, a – символ входной цепочки, на который указывает ip.
if (action [s, a] == shift s’)
{
push (a);
push (s’);
ip++;
}
else if (action [s, a] == reduce A→β)
{
for (i=1; i<=|β|; i++)
{
pop ();
pop ();
}
Пусть s’ – состояние на вершине магазина;
push (A);
push (goto [s’, A]);
Вывод правила (A→β);
}
else if (action [s, a] == accept)
{
return success;
}
else
{
error ();
}
}
Отредактировано Лис (2017-09-09 10:51:22)