Как определить допустимые строки в языке, описываемом регулярным выражением? - PullRequest
0 голосов
/ 16 декабря 2018

У меня проблемы с пониманием того, как определить правильную строку для заданных регулярных выражений.Я знаю ответы, поскольку был дан ключ ответа, но объяснений нет, и я был бы очень признателен, если бы кто-то смог объяснить, как определяются следующие ответы:

Укажите правильную строку на языках, описанныхкаждое из следующих регулярных выражений с алфавитом ∑ = {0, 1, 2}.

(a) 0 (010) * 1

ответ: 01, 00101, 00100101, 00100100100101

(б) (21-10) *0012* 1011 *

ответ: 001, 001222, 21001, 10001, 210012, 2121001222, 102121001

(с) 1 *(200) * 100 * 01

ответ: 1, 200, 111, 11200200, 111200200200, 1001, 1000001, 10000001

Спасибо!

1 Ответ

0 голосов
/ 16 декабря 2018

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

В вашем вопросе регулярное выражение - это описание набора строк, которые соответствуют этому выражению.Символы 0, 1 и 2 соответствуют друг другу, в то время как символ * означает, что предыдущий символ или группу символов (в скобках) можно повторять 0 или более раз, а символ является объединениемoperator.

Учитывая это, мы видим, что регулярное выражение 0* соответствует пустой строке и следующим строкам: 0, 00, 000 и т. д. Аналогично, (0 ∪ 1)* соответствует пустомуstring, 0, 1, 00, 01, 10, 11 и т. д. - в основном, любая строка, построенная из 0 и 1.Регулярное выражение 01*2 соответствует всем строкам, которые начинаются с одного нуля, за которым следует один или несколько и заканчиваются 2 (например, 02, 012, 0112 и т. Д.).

На основании этогорегулярное выражение в вашем первом примере может быть переведено на английский язык как «строка, начинающаяся с 0, за которой следует группа из трех цифр 010, которые встречаются ноль или более раз, а затем 1», поэтому всеиз приведенных ответов совпадают.Во втором примере, однако, только 210012 соответствует регулярному выражению, все остальные ответы не совпадают (или, может быть, вы пропустили * в конце: если регулярное выражение (21 ∪ 10)*0012*, ответы сразу станут более понятными),Я оставлю третий пример для вас.

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

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