Теория автоматов и формальных языков, осень 2013

Новости

    • 01.12.2013 - выложены примеры работы для задачи 2.

Задания

    1. Преобразование грамматики к нормальной форме Хомского.
    2. Срок: до 31.10.2013
    3. Табличный LL(1) анализатор.
    4. Срок: 30.11.2013

Преобразование грамматики к НФХ

Реализовать программу, осуществляющую преобразование КС-грамматики к нормальной форме Хомского.

Формат вызова:

a.exe {файл с описанием грамматики}

Формат файла с описанием грамматики:

N1 -> a11 a12 ... a1N1 
N2 -> a21 a22 ... a2N2 
...
Nm -> am1 am2 ... amNm 

где

  • Ni - нетерминальные символы (слова, начинающимися с заглавной латинской буквы).
  • N1 - стартовый символ - первый нетерминал в файле.
  • Количество символов в правой части соответствующего правила (N1, N2, ..., Nm) может быть равно 0 (эпсилон-цепочка).
  • Терминальные символы (строчные латинские буквы, десятичные цифры, знаки препинания, различные скобки)
  • aij - нетерминальные или терминальные символы.

Формат выдачи:

КС-грамматика в НФХ, описывающая тот же язык:

  • Если пустая цепочка принадлежит языку, добавить эпсилон правило для стартового нетерминала. Стартовый нетерминал в этом случае не должен встречаться в правых частях других правил.
  • Если в результате преобразования грамматики нетерминал описывает тот же язык, то он должен сохранить имя, если язык изменяется, то нетерминал следует переименовать.
  • Стартовый нетерминал - нетерминал в левой части первого правила.
  • Остальные правила упорядочены лексикографически.
  • В случае невозможности преобразования грамматики к НФХ (например, при удалении стартового символа), вывести FAIL

Построение табличного LL(1) анализатора

Реализовать программу, осуществляющую построение табличного LL(1) анализатора (сильного или полного) и моделирование его работы.

Формат вызова:

a.exe {файл с описанием грамматики} {файл входной цепочки}

Формат файла с описанием грамматики:

N1 -> a11 a12 ... a1N1 
N2 -> a21 a22 ... a2N2 
...
Nm -> am1 am2 ... amNm 

где

    • Ni - нетерминальные символы (слова, начинающимися с заглавной латинской буквы).
  • N1 - стартовый символ - первый нетерминал в файле.
  • Количество символов в правой части соответствующего правила (N1, N2, ..., Nm) может быть равно 0 (эпсилон-цепочка).
  • Терминальные символы (строчные латинские буквы, десятичные цифры, знаки препинания, математические операторы, различные скобки)
  • aij - нетерминальные или терминальные символы.

Формат файла входной цепочки:

{ASCII символы}

Пробелы и прочие невидимые символы игнорируются.

Формат выдачи:

В случае успешного завершения левый анализ цепочки (включая терминальные символы):

N1 ai1 ai2 ai3 ... aik OK

В случае обнаружения ошибки при распознавании, магазин анализа, соответствующий левому анализу максимально-корректного префикса:

N1 ai1 ai2 ai3 ... aik FAIL

В случае невозможности построения однозначного LL(1) анализатора (грамматика не является LL(1)-грамматикой):

FAIL

Требования к оформлению заданий

    • email на victorp@math.spbu.ru
    • префикс "[formlang]" в поле subject (+ задание или тема письма)
    • тело письма в соответствии с сетикетом: http://www.ietf.org/rfc/rfc1855.txt
    • в аттаче - архив с исходными кодами программ
    • в корне архива
      • для Java - build.xml, понимаемый инструментом Apache ant, порождающий в этой же папке запускающийся jar
      • для C# - все .cs файлы. Компляция - csc /out:a.exe *.cs
      • для C/C++ - *.c или *.cpp. Будут компилироваться gcc: gcc -I. -Wall
    • тесты для задания