Магазинные автоматы. Как магазинные автоматы воспринимают языки программирования

Автор работы: Пользователь скрыл имя, 30 Апреля 2012 в 15:43, творческая работа

Описание работы

В жизни сами того не подозревая мы очень часто встречаемся с разными видами автоматов. Наиболее часто мы встречаемся с конечными автоматами. Системы синтаксического анализа и перевода текста, компьютерные игры, системы управления сложными техническими устройствами, пользовательские интерфейсы, компиляторы, также конечные автоматы применяются для разработки приложений для мобильных телефонов и при написании мобильных операционных систем. Но при создании например программ для восприятия контекстно-свободных грамматик и других приложений для работы с языком и с анализом текста, гораздо более удобно применение магазинных автоматов.

Содержание работы

1.Введение.
2.Автоматы.Переход от структурного и конечного автоматов к магазинным автоматам.
3. Немного о стеках.
4. Отличия
5. Пример магазинного автомата распознающего нерегулярный язык.
6. Детерминированные и недетерминированные автоматы.
7. Автоматное программирование
8. Необходимость магазинных автоматов
9.Описание и команды магазинного автомата. Примеры.
10. Приложение к программе.
11. Исходный код программы.
12.Выводы.
13. Список Использованной литературы

Файлы: 1 файл

Московский Энергетический Институт.docx

— 272.06 Кб (Скачать файл)

return false;

default: // Ошибка, такой символ не допустим

cout  << "Position " << i << ", "

<< "Incorrect symbol! " << str[i] << "\n";

return false;

}  

break;

 

// Анализ четвертой строки таблицы  переходов

case bottom:

switch(str[i]) {

case '(': // [bottom, (] - невозможно при пустом магазине

cout  << "Position " << i << ", "

<< "Error 4: Impossible situation [bottom, \'(\']!\n";

return false;

case ')': // [bottom, )] - лишняя )

cout  << "Position " << i << ", "

<< "Error 5: unnecessary \')\'!\n";

return false;

case '\n': // [bottom, концевой маркер] - допустить!

return true;

default: // Ошибка, такой символ не допустим

cout  << "Position " << i << ", "

<< "Incorrect symbol! " << str[i] << "\n";

return false;

}  

break;

}

}

 

}

 

// Главная функция используется  для инициализации устройств  АМП

// пред каждым новым прогоном  и тестирования до тех пор,  пока не 

// будет прочитана пустая строка

int main () {

string strCursor;

str = "";

// Цикл распознавания различных  входных цепочек

do {

// Чтение очередной входной цепочки  в буфер

cout << "Input bracket\'s expression!: ";

 

// Формируем очередную строку  скобок для распознавания.

GetOneLine(cin, str);

 

// Здесь начинается разбор принятой  строки.

if(Parser())

cout << "+++++ OK! +++++\n";

else

cout << "----- Fatal error (look upper error message)! -----\n";

 

 

 

// Вывод разобранной строки и  значения позиции входой головки.

cout << "Line: " << str;

strCursor = " Pos: " + string(i, '-');

strCursor +='^';

cout << strCursor << "  i = " << i << "\n\n";

 

} while(str != "\n");

cout << "Goodbye!\n";

return 1;

}

 

Пример работы программы :

12.Выводы

Программирование магазинного  автомата, и восприятие  языков программирования магазинными автоматами, на первый взгляд кажется достаточно узкой  темой и редко применяемой, на самом деле в целом автоматное программирование это целый новый  мир для программиста, здесь совершенно другая структура составления программы, здесь нужно другое мышление и совсем другие проблемы.

Показанная реализация автомата таблицей переходов лишь один из способов реализации магазинного автомата, так же можно реализовать автомата с выделением тактов.

Магазинные автоматы могут распознавать любой контекстно-свободный язык. Поэтому чаще всего они применяются  в трансляторах, анализаторах текста, показанный пример по правильности расстановки  скобок показывает лишь направление в котором применяются автоматы. Главное отличие магазинных автоматов от конечных , что текущее состояние автомата очень сильно зависит от любого предыдущего.

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

Взяв данный проект, при желании  можно расширить и сделать  даже собственноручный анализатор выражений  и найти ему применение, тем  самым подчеркнув что нас окружают автоматы различного рода, и их понимание просто необходимо.

13.Список использованной литературы

1.wikipedia.org

2.А.А.Шалыто Автоматное программирование

3. Лекции А.И.Легалова

4. Мозговой М.В – Классика  программирования

Информация о работе Магазинные автоматы. Как магазинные автоматы воспринимают языки программирования