Вначале A пусто, а S состоит из единственного символа —начального нетерминала.

Если в некоторый момент S начинается на терминал t и t = Next, то можно выполнить команду Move и удалить символ t, являющийся начальным в S, поскольку при этом AS не меняется.

Если S начинается на терминал t и t не равно Next, то входное слово невыводимо —ибо по условию любой его вывод должен проходить через AS. (Это же справедливо и в случае Next = EOI.)

Если S пусто, то из условия (И) следует, что входное слово выводимо тогда и только тогда, когда Next = EOI.

Остается случай, когда S начинается с некоторого нетерминала K. По доказанному выше все левые выводы из S слов, начинающихся на символ Next, начинаются с применения к T одного и того же правила —того, для которого Next принадлежит направляющему множеству. Если таких правил нет, то входное слово невыводимо. Если такое правило есть, то нужно применить его к первому символу слова S —при этом свойство (И) не нарушится. Приходим к такому алгоритму:

S := пустое слово;

error := false;

{error => входное слово невыводимо;} {not error => (И)} while (not error) and not ((Next=EOI) and (S пусто)) do begin

| if (S начинается на терминал, равный Next) then begin

| | Move; удалить из S первый символ;

| end else if (S начинается на терминал, не равный Next)

| | then begin

| | error := true;

| end else if (S пусто) and (Next <> EOI) then begin

| | error := true; | end else if (S начинается на нетерминал и Next входит в

| | направляющее множество одного из правил для этого

| | нетерминала) then begin

| | применить это правило

| end else if (S начинается на нетерминал и Next не входит в | | направляющее множество ни одного из правил для этого

| | нетерминала) then begin

| | error := true;

| end;

end; {входное слово выводимо <=> not error}

Алгоритм заканчивает работу, поскольку при появлении нетерминала в начале слова S происходит чтение со входа или остановка, а бесконечный цикл сменяющих друг друга терминалов в начале S означал бы, что грамматика леворекурсивна.








Дата добавления: 2015-10-05; просмотров: 702;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.