построить недетерминированные конечные автоматы

Делаю рукописный лексер. Мне нужно нарисовать один недетерминированный конечный автомат, который содержит три конечных автомата, сделанных ранее. Я сделал их для таких ключевых слов, как самолет, облако, взлетно-посадочная полоса. Мне нужна помощь, как построить общие автоматы для этих трех автоматов. Мне нужен пример, как это сделать? Если вы знаете, пожалуйста, помогите мне??


person mik    schedule 23.04.2012    source источник


Ответы (1)


Нарисуйте автоматы самолета, облака и взлетно-посадочной полосы, оставив некоторое пространство перед начальными состояниями. Теперь сотрите их первое состояние. Нарисуйте перед ними новое одиночное состояние. Соедините его с автоматами «самолет» с переходом/краем «a», ребром «r» к «unway» и ребром «c» к «громкому». Вот и все. Сделанный.

В более общем случае это более сложно: сначала нарисуйте каждый из ваших автоматов (например, самолет, облако и взлетно-посадочную полосу), оставив пустое место там, где они начинаются. Затем нарисуйте состояние перед тем, где они начинаются, и соедините его с началом старых стартовых состояний автоматов самолета, облака и взлетно-посадочной полосы через свободные ребра. (Свободные ребра также называются ε-ребрами, эпсилон-ребрами, λ-ребрами или лямбда-ребрами).

Далее вы выполняете на них алгоритм построения подмножества, по которому вы можете найти видеоуроки на youtube. Существует также онлайн-алгоритм построения подмножества, который преобразует недетерминированные конечные автоматы к детерминированным конечным автоматам (DFA) для вас. Этот процесс называется детерминацией.

Когда у вас есть свой DFA, вы используете его для создания таблиц состояний, действий и поиска, которые управляют сканером. Это его собственная банка с червями. Люди обычно используют генератор сканеров, такой как Lex или Flex, для автоматизации этого. Аналогичным удобным инструментом, который вы можете использовать в Интернете, является онлайн-генератор сканеров. Вы можете использовать его для построения графика, введя следующие данные:

airplane:airplane
cloud:cloud
runway:runway

Это даст вам DFA для этого, например: .png">

person Wayland Smith    schedule 24.04.2012