Преобразование регулярной грамматики к регулярному выражению?

есть ли алгоритм или инструмент для преобразования регулярной грамматики к регулярному выражению?

2 ответов


ответ dalibocai:

моя цель-конвертировать обычный grammer в DFA. Наконец, я нашел отличный инструмент:JFLAP.


алгоритм довольно прост, если вы можете вычислить автомата из регулярного выражения. Как только у вас будет автомат. Например,(aa*b|c), автомат будет (стрелки идут вправо):

          a
         / \
      a  \ / b
-> 0 ---> 1 ---> 2 ->
    \___________/
          c

затем просто "перечислите" свои переходы как правила. Ниже рассмотрим, что 0, 1 и 2 являются нетерминальными символами, и, конечно же, A, b и c являются токенами.

0: a1 | c2
1: a1 | b2
2: epsilon

или, если вы не хотите пустую правую руку стороны.

0: a1 | c
1: a1 | b

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