Преобразование регулярной грамматики к регулярному выражению?
есть ли алгоритм или инструмент для преобразования регулярной грамматики к регулярному выражению?
2 ответов
алгоритм довольно прост, если вы можете вычислить автомата из регулярного выражения. Как только у вас будет автомат. Например,(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
и, конечно, маршрут в другом направлении предоставляет одно средство для преобразования регулярной грамматики в автомат, следовательно, рациональное выражение.