Как найти язык NFA - PullRequest
       91

Как найти язык NFA

2 голосов
/ 01 марта 2020

Как и выше, у меня есть график перехода, но я не уверен, как найти его язык, мне кажется, что есть много возможностей, но я должен как-то неправильно понять. Насколько я понимаю, любое слово, которое ведет от начального до конечного состояния, принимается. Конечно, есть много разных способов добиться этого. ааб, аб, абб, аббааб. Насколько я понимаю, язык - это набор всех возможных слов, но если существует огромное количество возможных слов, как вы можете найти язык? Я студент первого курса университета, это часть моей домашней работы, но я не просто пытаюсь заставить вас сделать это для меня, я хочу понять это - если это не имеет смысла / не в том месте, я заранее извиняюсь, спасибо. Вот мой график

1 Ответ

1 голос
/ 02 марта 2020

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

Однако - есть языки, которые не являются конечными. Они не содержат никакого количества слов, которые вы можете считать от начала до конца или когда-либо полностью записывать. Если вы думаете о всех натуральных числах (1, 2,…, 100,…) как о строках на языке десятичных представлений, ясно, что их не конечное число. Их бесконечно много. Вы не можете дать исчерпывающие определения бесконечных языков (за исключением, возможно, многопланового использования многоточия, как я сделал в моем примере). В этих случаях вы должны описать строки, которые включены и / или исключены, и полагаться на читателя, чтобы определить членство в каждом конкретном случае.

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

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

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

Ваш NFA зацикливается на q0, принимая любое число a, пока не увидит хотя бы один a. Если он видит b перед a, он падает. После этого, если он видит хотя бы один b, он может принять; он может видеть любое число b, но после начального запуска a он больше никогда не увидит два a подряд. Машина принимает, только если она заканчивается на b.

. Взятые вместе, это может быть описание на простом английском языке sh, которое подходит для этого языка:

Все строки, начинающиеся хотя бы с одного a, заканчивающиеся b и не содержащие подстроку aa после первого экземпляра b.

Регулярное выражение для этого язык aa*(bb*a)*.

...