Попытка использовать регулярное выражение jflap в Scala
Просьба посмотреть следующие DFA
создан с помощью JFLAP. Когда я конвертирую в регулярные выражения, JFLAP дает:
p+(q+pq)(pq)*(λ+p)
Когда я вставляю его в Scala REPL:
scala> val regex = "p+(q+pq)(pq)*(+p)".r
java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 14
p+(q+pq)(pq)*(+p)
^
at java.util.regex.Pattern.error(Unknown Source)
У меня два простых вопроса.
Это правильное регулярное выражение? Почему он включает в себя?
Как мне использовать его в Scala, так как λ не отображается правильно, когда я вставляю в repl?
1 ответ
Решение
В формальных регулярных выражениях +
означает "или". Регулярное выражение, которое вы хотите использовать, выглядит примерно так:
p|(q|pq)(pq)*p?