Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regular language 正则语言的有限性_Regular Language_Finite Automata_Automata_Formal Languages_Automata Theory - Fatal编程技术网

Regular language 正则语言的有限性

Regular language 正则语言的有限性,regular-language,finite-automata,automata,formal-languages,automata-theory,Regular Language,Finite Automata,Automata,Formal Languages,Automata Theory,我们都知道(a+b)*是一种只包含符号a和b的常规语言。 但是(a+b)*是一个无限长的字符串,它是规则的,因为我们可以构建一个有限自动机,所以它应该是有限的 有人能解释一下吗?语言中的每个单词都是有限长的。就像有无限多个整数一样,但每个整数都是有限的 是的,语言本身是一个无限的集合。大多数语言都是。但是一个有限自动机(注意:自动机是复数形式)对他们来说很好,只要每个单词的长度是有限的 顺便说一句:这类问题可能应该访问cs.stackexchange.com。1。正则表达式描述由某种语言生成的字

我们都知道
(a+b)*
是一种只包含符号
a
b
的常规语言。 但是
(a+b)*
是一个无限长的字符串,它是规则的,因为我们可以构建一个有限自动机,所以它应该是有限的


有人能解释一下吗?

语言中的每个单词都是有限长的。就像有无限多个整数一样,但每个整数都是有限的

是的,语言本身是一个无限的集合。大多数语言都是。但是一个有限自动机(注意:自动机是复数形式)对他们来说很好,只要每个单词的长度是有限的


顺便说一句:这类问题可能应该访问cs.stackexchange.com。

1。正则表达式描述由某种语言生成的字符串。应用该正则表达式可以得到该语言可以描述的所有字符串

2.当您将该正则表达式转换为有限自动机(状态为有限状态的自动机)时,这意味着同样的字符串也可以通过在该自动机上从一个状态遍历到另一个状态来生成。现在,直观地说,这里的每个状态都表示一组属于该语言的字符串。它说,在“吸收”了一些输入之后,字符串现在处于状态X

示例:

如果您希望正则表达式接受偶数0的字符串,那么您将有一个状态(组),它指示到目前为止在输入中观察到偶数0。奇数的另一个状态(组)-->此状态将是FA中的不接受状态

如图所示,由于奇数和偶数的分组,您只需要2个(有限)状态来生成无限多的字符串


这就是为什么它是规则的

有限自动机可以为任何正则语言构造,正则语言可以是有限集或无限集。当然有无限的集合,它们不是正则集合。检查下面的维恩图:


注释
1.每个有限集都是正则集。
2.无限集的任何dfa都将始终包含循环(或者无限集不可能有无循环的dfa)。
3.每一种非正则语言都是一个无限集

有限自动机中的“有限”一词意味着,在自动机中,对于一类规则语言,存在“有限内存”,因此,在处理一系列语言时,在任何时间,只能存储“有限”(或称为有界)数量的信息

在有限自动机中,内存仅以状态的形式存在(而在另一类自动机如Pda中,图灵机外部内存用于存储无限信息)。你可以把有限自动机想象成没有显式内存的CPU;只能在其寄存器中存储最近的结果

因此,我们可以将“常规语言”定义为一类语言,在处理语言字符串时,在任何时间都只需要存储有界(有限)信息

进一步阅读(对于无限语言):

  • 什么是常规语言:
  • 要了解状态如何用作内存元素,请阅读以下答案:
  • 有限语言和无限规则语言的区别是:
但是
(a+b)*
是一个无限长的字符串


否,
(a+b)*
是表示有限字符串的无限集合(语言)的有限方式。

它只是表示指定语言存在一个有限正则表达式,并且与表达式生成的任何字符串无关。 对于许多正则语言,我们可以生成无穷多的字符串,这些字符串跟随该语言,但对于该语言,则是正则的,以证明我们需要一个必须是有限的正则表达式。
所以这里的表达式(a+b)*是表示0-n个a或b或其组合的有限方式,但n可以取任何值,从而导致无限数量的字符串。

你是正确的!不仅正则表达式,语法和语法也是集合(语言)+的有限表示。