Алгоритм преобразования регулярного выражения в линейную грамматику
Каков стандартный алгоритм преобразования любого заданного регулярного выражения (RE) в левую (или правую) линейную грамматику?
Я знаю, что могу сделать это так (написать линейную грамматику из RE):
RegEx -> NFA -> DFA -> Right Linear grammar
.
Для прямого подхода я могу обрабатывать простые регулярные выражения, такие как (0 + 10)*
, и создавать линейную грамматику.
Но когда есть, скажем, вложенная звезда клина, очень трудно произвести CFG, который является линейным, без какого-либо четко определенного метода.
Я видел некоторые ответы на подобные вопросы. вопросы здесь и здесь. Но они не обеспечивают общего algo или не преобразуют регулярное выражение в линейную грамматику .
В частности, как я могу преобразовать это : (((01+10)*00)*11)*
непосредственно в линейную грамматику, используя некоторый алгоритм?
Любая помощь ценится.
EDIT
Сделал еще несколько поисков. И получил вот это.
Построение эквивалентной регулярной грамматики из регулярного выражения