#regex #automata #dfa #automata-theory
#регулярное выражение #автоматы #dfa #теория автоматов
Вопрос:
Каковы условия для того, чтобы цепочка была принята этим регулярным выражением?
Ответ №1:
* в конце может означать, что начальное состояние принимает и что автомат возвращается в это состояние всякий раз, когда он что-либо принимает. Вызовите начальное состояние q1.
Чтобы принять 1 (01 * 0)1, мы должны сначала использовать 1 и перейти в новое состояние, скажем, q2. Оттуда мы можем самостоятельно выполнить цикл для подвыражения 01 * 0, перейдя в новое состояние, q3, на 0, затем выполнив цикл на 1 в q3, затем вернувшись к q2 на 0.
Из q2 мы можем вернуться к q0 на 1. Наш DFA выглядит следующим образом:
/--1-- /--0--
| | |
V | V |
--->(q1)-1->(q2)-0->(q3)-
| ^
0 | /
| -1-/
V
(q4)-
^
| /
,1/
Что-то вроде этого должно это сделать.
Ответ №2:
Если вы не знаете, с чего начать, вам следует записать несколько первых элементов, сгенерированных регулярным выражением. В этом случае:
SET = {eps, 11, 1001, 10101, ...}
а затем попытайтесь что-нибудь придумать. Впрочем, вы получили ответ, так что я не собираюсь это повторять.
Ответ №3:
Может у вас появится какая-нибудь идея
[[0-9s] .*]*
Демонстрация:https://rubular.com/r/n3bVXJd3SFffr0