【发布时间】:2009-01-14 12:18:52
【问题描述】:
如何描述语言
A → AA | ( A ) | ε
使用正则表达式生成?
【问题讨论】:
-
这是作业吗?您能告诉我们您自己为解决这个问题所做的努力,以及您没有得到什么吗?
如何描述语言
A → AA | ( A ) | ε
使用正则表达式生成?
【问题讨论】:
正则表达式接受来自正则语言的字符串。 FSM 也可以接受常规语言。
在您的语言中,您必须匹配的括号数量可能无限多。这意味着您需要一个无限状态,这在任何 Finite 状态机中显然是不可能的。因此,您的语言不规则,无法与正则表达式匹配。
【讨论】:
正则表达式不能匹配嵌套括号。
【讨论】:
我不确定您如何标记该语言,但该语言不是常规语言,正如可以使用常规语言的抽引引理所示(因此,它不能被正则表达式记录)。一个直观的解释是,接受该语言中的单词将要求 FDA “记住”每次开始读取右括号时它刚刚读取的左括号的数量,而这对他们来说是不可能的,因为他们没有“记忆” '。另一方面,下推式自动机......
对于任何 n,该语言是否可以记为 {(n)n}*?
【讨论】:
您不能 - 正则表达式只能识别一小部分可能的语言。特别是,非正式地,任何需要无限量内存才能识别的语言都是不可识别的。
在这里,您需要无限量的内存来记住您看到了多少个左括号,以确保右括号的数量相同。
您需要一些能够解析上下文无关语法的机制,以便能够识别 BNF 描述的一般语言。现代解析器在这方面非常擅长!
【讨论】:
正如其他人所说,您不能使用单个正则表达式来执行此操作,但是您可以使用两个“\(”和“\)”对其进行标记。看到您的语言中只能有括号,但我不确定这是否非常有用。
注意:您还需要一名传球手来确保括号正确配对。所以“(()()”会分词但不会解析。
【讨论】: