Создать DFA для регулярного выражения действительного числа?

Я пытаюсь построить определенные конечные автоматы (DFA) действительного числа, которое определяется как:

  • Строка, начинающаяся с необязательных символов «+» или «-».
  • За которым следует один ноль или непустая последовательность цифр, которая не начинается с нуля.
  • После десятичной точки.
  • За которым следует непустая последовательность цифр

И от цифр зависит его отделка, настоящая она или нет.

Я построил регулярное выражение: /[+ | -]?(O | ([1-9][0-9]*)).[0-9]+/


person Pik    schedule 05.02.2018    source источник
comment
В чем проблема ? Чем ваш код отличается от ожидаемого результата?   -  person SherylHohman    schedule 05.02.2018
comment
Я всегда нахожу онлайн-тестеры регулярных выражений полезны при построении/тестировании/отладке выражений регулярных выражений. Например: regex101.com   -  person SherylHohman    schedule 05.02.2018
comment
Есть ли специальный тестовый случай, когда ваше выражение терпит неудачу? Не могли бы вы предоставить пару тестовых строк, которые вы хотели бы видеть пройденными?   -  person SherylHohman    schedule 05.02.2018
comment
Из этого обычного исключения я хочу нарисовать DFA. Как я могу это сделать ?   -  person Pik    schedule 05.02.2018
comment
i.ytimg.com/vi/IE4LcyIfGOk/maxresdefault.jpg что-то в этом роде я должен думать.   -  person Pik    schedule 05.02.2018
comment
Имея регулярное выражение, сначала создайте из него Thompson-NFA, исключите эпсилон-переходы и определите его. Должно быть довольно просто, потому что Thomson-NFA уже почти детерминирован.   -  person CoronA    schedule 05.02.2018


Ответы (2)


Посмотрите здесь, как используется регулярное выражение

^[+-]?(?:0|[1-9]\d*)(?:\.\d+)?$
  • ^ Займите позицию в начале строки
  • [+-]? Необязательно соответствует либо +, либо -
  • (?:0|[1-9]\d*) Соответствует либо 0, либо числу, начинающемуся с цифры в диапазоне 1-9, за которой следует любое число из любой цифры
  • (?:\.\d+)? Необязательно соответствует десятичной запятой (точка ., за которой следует одна или несколько цифр)
  • $ Займите позицию в конце строки
person ctwheels    schedule 05.02.2018