Автор работы: Пользователь скрыл имя, 30 Апреля 2012 в 15:43, творческая работа
В жизни сами того не подозревая мы очень часто встречаемся с разными видами автоматов. Наиболее часто мы встречаемся с конечными автоматами. Системы синтаксического анализа и перевода текста, компьютерные игры, системы управления сложными техническими устройствами, пользовательские интерфейсы, компиляторы, также конечные автоматы применяются для разработки приложений для мобильных телефонов и при написании мобильных операционных систем. Но при создании например программ для восприятия контекстно-свободных грамматик и других приложений для работы с языком и с анализом текста, гораздо более удобно применение магазинных автоматов.
1.Введение.
2.Автоматы.Переход от структурного и конечного автоматов к магазинным автоматам.
3. Немного о стеках.
4. Отличия
5. Пример магазинного автомата распознающего нерегулярный язык.
6. Детерминированные и недетерминированные автоматы.
7. Автоматное программирование
8. Необходимость магазинных автоматов
9.Описание и команды магазинного автомата. Примеры.
10. Приложение к программе.
11. Исходный код программы.
12.Выводы.
13. Список Использованной литературы
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. Мозговой М.В – Классика программирования
Информация о работе Магазинные автоматы. Как магазинные автоматы воспринимают языки программирования