Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОБЗОРНАЯ ЛЕКЦИЯ ПО КУРСУ ЯП и МТ.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
141.53 Кб
Скачать
    1. Удаление бесполезных символов грамматики

При разработке грамматики языка могут возникнуть следующие ошибки:

  • В грамматике имеются нетерминальные символы, которые не участвуют в выводе терминальных цепочек

  • В грамматике существуют символы, недоступные из начального символа грамматики

Бесполезные символы это

W={X | X  , (S*X*x, , x,   T*).

Их можно разделить на три группы:

        1. нетерминалы, не порождающие терминальных строк

{X | X N, (X*x), x  T*}

        1. недостижимые нетерминалы, порождающие терминальные строки

{X | X  N, (S*X), (X*x), ,   , xT).

        1. недостижимые терминалы

{X | X  T, (S*X), ,   ).

Нетерминалы (достижимые и недостижимые), не порождающие терминальных строк, можно вычислить и удались, используя в качестве основы алгоритм проверки существования языка.

Алгоритм устранения нетерминалов, не порождающих терминальных строк, состоит в следующем:

Вход: КС-грамматика G=(VN, T, P, S) без -правил.

Выход: Эквивалентная КС-грамматика G’=(VN, T, P’, S) у которой L(G)=L(G’) и для всех Z  N существуют выводы Z*x, где xT*.

  1. Положить N0=

  2. Вычислить N1= N0  {A | (A)  P и   (N0  T)*}

  3. Если N1 N0 , то положить N0= N1 и перейти к п.2; иначе положить N= N1

  4. Вычислить VN = VN  N, NБ= VN – V’N, P’=P-PБ , где PБ P – это множество правил, содержащих бесполезные нетерминалы X  NБ, т.е.

PБ = {(X)  P , (AX)  P для всех X NБ, где А V’N , ,  *}

Пример: Рассмотренный алгоритм преобразует грамматику G=(VN, T, P, S) = ({a, b, d}, {Q, A, B, C}, P, Q) c правилами:

Q  ab

Q  AC

A  AB

B  b

C  db

Шаг алгоритма

Действия и результаты

1

N0=

2

N1 = { Q, B, C }

3

N1 = N0 ? Нет N0 = N1={ Q, B, C }

4

N1 = { Q, B, C }

5

N1 = N0 ? Да N ={ Q, B, C }

6

V’N= { Q, B, C } NБ = {A}

P’= {Q  ab, B  b, C  db}

Алгоритм устранения недостижимых символов.

Недостижимые терминалы (группа “в” бесполезных символов) и недостижимые нетерминалы, порождающие терминальные строки (группа “б” бесполезных символов), исключаются из грамматики с помощью алгоритма устранения недостижимых символов.

Вход: КС-грамматика G=(VN, T, P, S)

Выход: Эквивалентная КС-грамматика G’=(N’, T’, P’, S) у которой L(G)=L(G’) и для всех Z  ’ существуют выводы S*Z, где , (’)*.

Здесь, как и в предыдущей задаче, сначала решается обратная задача, т.е. определяется множество W достижимых символов Z:

W={Z | Z  ,  S*Z, где , (’)*}.

    1. Положить W0=S

    2. Вычислить W1= W0  {X | X  , (AX) P, A  W0 , , (’)*}

    3. Если W1W0 , то положить W0= W1 и перейти к п.2; иначе положить W= W1

    4. Вычислить N’=NW, T’==TW, Б=-W, P’=P-PБ, где PБP – это множество правил, содержащих недостижимые символы X Б, т.е. PБ = {(X )P для всех X Б , где }

Пример: Преобразование КС-грамматики с правилами

1) Q  ab 2)B  b 3)C  db

в эквивалентную грамматику, не содержащую бесполезных символов.

Шаг алгоритма

Действия и результаты

1

W0=Q

2

W1 = { Q, a,b }

3

W1 = W0 ? Нет W0 = W1={ Q, a, b }

4

W1 = { Q, a, b }

5

W1 = W0 ? Да W ={ Q, a, b }

6

N’= { Q} T’={a, b} Б={B, C, d}

P’= {Q  ab}