BNF到正则表达式

时间:2009-01-14 12:18:53

标签: regex bnf

如何描述语言

A → AA | ( A ) | ε

使用正则表达式生成?

5 个答案:

答案 0 :(得分:14)

正则表达式接受常规语言的字符串。 FSM也可以接受常规语言。

您的语言中可能有无限数量的括号,您必须匹配。这意味着你需要一个无限状态,在任何有限状态机中显然是不可能的。因此,您的语言不规则,无法与正则表达式匹配。

答案 1 :(得分:6)

正则表达式与嵌套括号不匹配。

答案 2 :(得分:1)

我不确定你如何能够用这种语言来表达,但是这种语言并不常见,正如使用常规语言的抽象引理所表明的那样(因此,正则表达式无法指出)。一个直观的解释是接受来自该语言的单词将要求FDA“记住”每次开始阅读右括号时它刚刚读取的左括号的数量,而这对于他们来说是不可能的,因为它们没有“记忆” ”。另一方面,是一个下推式自动机......

对于任何n?

,是否可以将该语言记为{( n n } *

答案 3 :(得分:0)

你不能 - 正则表达式只能识别一小部分可能的语言。特别是,非正式地,任何需要无限量记忆的语言都无法识别。

在这里,你需要一个无限量的记忆来记住你看过多少个开括号,以确保结束括号的数量是相同的。

您需要一些能够解析无上下文语法的机制,以便能够识别BNF描述的语言。现代解析器非常擅长这个!

答案 4 :(得分:0)

正如其他人所说,你不能用一个正则表达式来做这件事,但你可以用两个“\(”和“\”)来标记它。看到你的语言只能有括号,虽然我不确定这会非常有用。

注意:您还需要一个传球手,以确保括号正确配对。所以“(()()”将标记但不会解析。