将正则表达式转换为线性语法的算法

时间:2013-04-11 03:12:13

标签: regex algorithm grammar regular-language

将任何给定的正则表达式(RE)转换为左(或右)线性语法的标准算法是什么?

我知道我可以这样做(从RE写出Linear Grammar):

RegEx -> NFA -> DFA -> Right Linear grammar

对于直接方法,我可以处理像(0 + 10)*这样的简单正则表达式并创建线性语法 但是当有一个嵌套的kleene星时,很难产生一个线性的CFG,没有任何明确定义的方法。

我看到了类似问题herehere的一些答案。但它们不提供通用算法或不将正则表达式转换为线性语法。

特别是,如何使用某种算法将此(((01+10)*00)*11)*直接转换为线性语法?

感谢任何帮助。

修改

进行了一些搜索。得到了这个。
Constructing an Equivalent Regular Grammar from a Regular Expression