|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.10.2008, 21:31 | #1 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
Конечный автомат на Delphi
Привет... Вот не знал куда написать и написал сюда... (предмет ТВП)
Вот задание: Лабораторная работа 3 Дан конечный автомат. Проверить принимает ли автомат цепочку ω = 0011. Какие цепочки принимает автомат М= ({p, q, r}, {0, 1}, δ, q, {r}) а какие отвергает. Текстовый редактор+функционирующая структура δ (p, 0) = {q} δ (p, 1) = {p} δ (q, 0) = {r} δ (q, 1) = {p} δ (r, 0) = {r} δ (r, 1) = {r} Я первый раз с этим сталкиваюсь. Нужно сделать эмуляцию на делфи. Я не врубаюсь в это, не понимаю что сделать надо... Подскажите, может у кого такое чтото было. Где про это почитать можно и тому подобное... Надо делать, а с чего начать не знаю. Точнее не знаю что это и как это реализовывать... Дайте рекомендации и ссылочки может быть ну или ещё что.... Просто мненужно понять что это такое? Заранее благодарен и извините за ОФФтоп. |
02.10.2008, 22:50 | #2 |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
Для примера могу сказать, что конечные автоматы всегда используются в синтаксическом анализе языков программирования. Методом конечных автоматов, синтаксический анализатор выделяет ключевые слова, числа, символы, строки. Представте цепочку символов определенной длинны(пусть это будет текст программы), программа-конечный автомат, которая выполняет анализ этого текста, читает текст с лева направо, каждый следующий символ либо переводит автомат в новое состояние, либо оставляет в прежнем. Число состояний автомата ограничено! Можно составить диаграмму состояний автомата. Когда автомат видит число, он переходит в состояние "встретил число", если все последующие символы до разделителя оказываются числом, он так и остается в этом состоянии и когда ему встретится разделитель он возвращает результат - "прочитал число", если же ему в этом числе встретились текстовые знаки, он переходит в состояние, "встретил идентификатор" и вернет он уже не число а идентификатор и т.д.
Технически, весь автомат реализуется в виде цикла, в условии цикла, стоит проверка, не закончилась ли анализируемая цепочка. Внутри цикла как правило ветвящаяся структура из case, которая анализирует текущую позицию и переводит автомат в определенное состояние или оставляет в прежнем. В вашем примере не могу точно сказать, не совсем всё понятно. Здесь видимо (p, 0) = {q} p и 0 переводят автомат в состояние q (p, 1) = {p} p и 1 оставляют автомат в состоянии p (q, 0) = {r} q и 0 переводят автомат в состояние r (q, 1) = {p} q и 1 переводят автомат в состояние p (r, 0) = {r} r и 0 оставляют автомат в состоянии r (r, 1) = {r} r и 1 оставляют автомат в состоянии r А что дальше делать непонятно, пример бы какой-нибудь, как у вас это преподают... Теорию можно найти в интернете, но осилите ли вы её и подойдет ли она для вашего задания неизвестно... Последний раз редактировалось Rik; 02.10.2008 в 22:53. |
02.10.2008, 23:30 | #3 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
Спасибо, кое что понял... Но так же много непонятного...
Просто препод приезжий... Приезжает на 2-3 дня, начитывает 30-40 страниц, раздает лабы и уезжает. Вот так и живём... Ну спасибо ещё раз, буду что то пытаться делать... |
02.10.2008, 23:35 | #4 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
Я в инете искал, но толком ничего не могу найти... Ссылочку не дадите?
|
02.10.2008, 23:50 | #5 |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
К сожалению ссылки у меня не сохранились, если у вас записаны лекции, лучше по ним и разбираться, в инете лучше не будет... Для примера реализации конечного автомата, можете посмотреть в Delphi парсер, в модуле Classes есть класс TParser. Распознает числа, строки, символы. Основная функция, в которой реализован конечный автомат - TParser.NextToken. Он может принимать состояния:
toEOF = Char(0); toSymbol = Char(1); toString = Char(2); toInteger = Char(3); toFloat = Char(4); toWString = Char(5); Последний раз редактировалось Rik; 02.10.2008 в 23:55. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? | redred | Общие вопросы Delphi | 10 | 11.12.2007 10:43 |
Клеточный автомат | Noor | Помощь студентам | 4 | 29.11.2007 09:19 |
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? | dagarik | БД в Delphi | 7 | 22.10.2007 17:54 |
не StringGrid1.Cells[1,1]:='Delphi'; а вот так SG1.C[1,1]:='Delphi' | Nemesisking | Компоненты Delphi | 7 | 08.09.2007 03:27 |
Как устроен музыкальный автомат? | DelphiKettle | Свободное общение | 0 | 26.07.2007 23:04 |