Конечные автоматы и альтернативы
Конечные автоматы и альтернативы
Я упомянул, что регулярные выражения могут анализироваться с использованием конечного автомата. В большинстве книг по компиляторам а также в большинстве компиляторов, вы обнаружите, что это применяется буквально. Обычно они имеют настоящую реализацию конечного автомата с целыми числами, используемыми для определения текущего состояния и таблицей действий, выполняемых для каждой комбинации текущего состояния и входного символа. Если вы пишите «front end» для компилятора, используя популярные Unix инструменты LEX и YACC, это то, что вы получите. Выход LEX – конечый автомат, реализованный на C плюс таблица действий, соответствующая входной грамматике данной LEX. Вывод YACC аналогичен... исскуственный таблично-управляемый синтаксический анализатор плюс таблица, соответствующая синтаксису языка.
Однако это не единственный вариант. В наших предыдущих главах вы много раз видели, что возможно реализовать синтаксические анализаторы специально не имея дела с таблицами, стеками и переменными состояния. Фактически в пятой главе я предупредил вас, что если вы считает себя нуждающимся в этих вещах, возможно вы делаете что-то неправильно и не используете возможности Паскаля. Существует в основном два способа определить состояние конечного автомата: явно, с номером или кодом состояния и неявно, просто на основании того факта, что я нахожусь в каком-то определенном месте кода (если сегодня вторник, то это должно быть Бельгия). Ранее мы полагались в основном на неявные методы, и я думаю вы согласитесь, что они работают здесь хорошо.
На практике может быть даже не обязательно иметь четко определенный лексический анализатор. Это не первый наш опыт работы с многосимвольными токенами. В третьей главе мы расширили наш синтаксический анализатор для их поддержки и нам даже не был нужен лексический анализатор. Причиной было то, что в узком контексте мы всегда могли сказать просто рассматривая единственный предсказывающий символ, имеем ли мы дело с цифрой, переменной или оператором. В действительности мы построили распределенный лексический анализатор, используя процедуры GetName и GetNum.
Имея ключевые слов мы не можем больше знать с чем мы имеем дело до тех пор, пока весь токен не будет прочитан. Это ведет нас к более локализованному сканеру, хотя, как вы увидите, идея распределенного сканера все же имеет свои достоинства.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
13.4. Альтернативы read() и write()
13.4. Альтернативы read() и write() Несмотря на то что системные вызовы read() и write() как нельзя лучше подходят приложениям для извлечения и хранения данных в файле, все же они не всегда являются самыми быстрыми методами. Они допускают управление отдельными порциями данных; для
Пакет Автоматы
Пакет Автоматы Пакет Автоматы специфицирует поведение при построении моделей с использованием систем переходов для конечного множества состояний. В нем определено множесто понятий, которые необходимы для представления поведения модели в виде дискретного
6.1. Автоматы
6.1. Автоматы Автомат (state machine) в языке UML представляет собой некоторый формализм для моделирования поведения элементов модели и системы в целом. В метамодели UML автомат является пакетом, в котором определено множество понятий, необходимых для представления поведения
Альтернативы DNS
Альтернативы DNS Можно получить информацию об имени и адресе без использования DNS. Типичной альтернативой служат статические файлы со списком узлов (обычно файл /etc/hosts, как мы указываем в табл. 11.2), информационная система сети (Network Information System, NIS) и упрощенный протокол службы
30.2. Альтернативы для клиента TCP
30.2. Альтернативы для клиента TCP Мы уже обсуждали различные способы устройства клиентов, но стоит тем не менее еще раз обратить внимание на относительные достоинства и недостатки этих способов.1. В листинге 5.4 показан основной способ устройства клиента TCP. С этой
Альтернативы ICQ
Альтернативы ICQ Популярность интернет-пейджеров привела к возникновению целого ряда других клиентских программ. Официальный клиент ICQ от Mirabilis претерпел за время своего существования значительные изменения. Этот программный продукт уверенно двигался, если можно так
Повышение цен – альтернативы
Повышение цен – альтернативы Никаких альтернатив! И вот почему. Мало кто из интернет-бизнесменов Рунета верит в действенность высоких цен. Большинство владельцев очень боятся встать на путь их повышения и никогда этого не делали.На самом деле покупатели
Конечные автоматы
Конечные автоматы Подпрограмма анализа типа GetName действительно реализует конечный автомат. Состояние неявно в текущей позиции в коде. Очень полезным приемом для визуализации того, что происходит, является синтаксическая диаграмма или «railroad-track» диаграмма. Немного
2. Жизнь диктует свои законы, или Клеточные автоматы и машинная графика
2. Жизнь диктует свои законы, или Клеточные автоматы и машинная графика Жизнь — это многоклеточное сообщество, населяющее пустыни Флатландии. Пустыня представляет собой квадратную решетку, каждая ячейка которой вмещает одну клетку Жизни. Мерой течения времени служит
Глава 10. Конечные автоматы и регулярные выражения.
Глава 10. Конечные автоматы и регулярные выражения. Существует целый класс проблем, которые могут быть решены с помощью авторучки и бумаги. По-моему, это замечательный аспект программирования: иметь возможность графически представить какой-либо процесс, а затем
Конечные автоматы
Конечные автоматы В отличие от большинства рассмотренных в этой книге алгоритмов, конечные автоматы - это технологии, призванные облегчать разработку других алгоритмов. Они служат средством достижения конечной цели - реализации алгоритма. Тем не менее, как будет
Детерминированные и недетерминированные конечные автоматы
0
Народные альтернативы
Народные альтернативы Автор: Киви БердСексуальные преступники-педофилы наряду с международным терроризмом уже давно выступают в качестве главного жупела, которым власти пугают обывателей и оправдывают всякое новое ограничение прав и свобод в Интернете. Но хотя
Альтернативы депонированию криптоключей
Альтернативы депонированию криптоключей Поддержка депонирования криптоключей — это не единственный способ предоставления государству доступа к информации. Другой подход — это использование слабой криптографии. При этом ключи должны быть достаточно короткими, для
6.4. Альтернативы Internet Explorer
6.4. Альтернативы Internet Explorer Internet Explorer — самый популярный браузер на сегодняшний день, его использует подавляющее большинство пользователей, однако кроме Microsoft есть другие компании, которые занимаются выпуском программ-браузеров. Рассмотрим лишь наиболее известные: Opera,
Конечные субъекты
Конечные субъекты Конечные субъекты, или пользователи, PKI делятся на две категории: владельцы сертификатов и доверяющие стороны. Они используют некоторые сервисы и функции PKI, чтобы получить сертификаты или проверить сертификаты других субъектов. Владельцем сертификата