描述正则表达式的语言是否经常出现?

时间:2014-05-12 00:44:40

标签: regex context-free-grammar regular-language context-free-language

如果我们使用运算符*|和连接.(我们为了清晰起见而省略)和括号()来描述正则表达式和一些字母Sigma中的一些字母,然后是描述正则表达式本身的常规语言?在我看来没有,因为我们有括号意味着没有有限状态机可以识别输入,所以它必须是无上下文的语言。

关于偏离主题的注意事项

我坚持我的立场,这个问题与编程有关,因为我在考虑编写正则表达式识别器时想出了它。如果有人想要实现这样的事情,那么人们很快就会意识到你实际上需要一个无上下文的解析器来解析正则表达式,这个问题将回答这个问题。而且,答案和问题并非“非常理论化”。因为有限自动机的主题被认为是1年级和2年级的本科材料,所以把它放在理论计算机科学堆栈交换中将是一个过度的。

1 个答案:

答案 0 :(得分:3)

不,这不常见。考虑一下平衡括号的语言甚至不是常规的。使用平衡括号语言的抽象引理的矛盾证明也适用于正则表达式的语言。

虽然它是Context Free,但使用无上下文语法很容易描述:

S -> SS
S -> S|S
S -> S*
S -> (S)
S -> a
S -> b
S -> c
S -> ...     // Continue for all terminals in the alphabet, and
S -> epsilon // The empty string