Math 在计算机科学中,什么不是正式语言?

Math 在计算机科学中,什么不是正式语言?,math,compiler-construction,computer-science,Math,Compiler Construction,Computer Science,在维基百科上,我找到了正式语言的定义: 在数学、计算机科学和语言学中,一种形式语言 是一组可能受以下规则约束的符号字符串: 都是特定于它的 这在我看来相当抽象。我无法想象任何不符合这个定义的语言。有没有人知道非正式语言是什么样子的,以及它如何不符合定义的?英语不是正式语言。这不仅仅是一组字符串;它有一种口语形式,随着时间的推移而演变,有方言,还有各种正式语言所没有的东西。正式语言从十年到下一个十年都无法获得“email”这个词。语言是由给定符号组成的一组序列。它可以是有限的,也可以是无限的(英语

在维基百科上,我找到了正式语言的定义:

在数学、计算机科学和语言学中,一种形式语言 是一组可能受以下规则约束的符号字符串: 都是特定于它的


这在我看来相当抽象。我无法想象任何不符合这个定义的语言。有没有人知道非正式语言是什么样子的,以及它如何不符合定义的?

英语不是正式语言。这不仅仅是一组字符串;它有一种口语形式,随着时间的推移而演变,有方言,还有各种正式语言所没有的东西。正式语言从十年到下一个十年都无法获得“email”这个词。

语言是由给定符号组成的一组序列。它可以是有限的,也可以是无限的(英语句子集是无限的,即使有一些句子,例如过长的句子,即使是母语人士也无法理解)。如果它是有限的,那么对它的任何描述都是一个形式定义

如果语言是无限的,比如说涉及数字、两个二进制运算符“+”、“*”和变量的算术表达式语言,那么您不可能列出属于该语言的所有字符串,但有时(参见下面blazs的注释),您可以将有限描述作为一组规则

E:=NUM | v | E'+'E | E'*'E

(其中NUM是一个数字序列,v是一个变量)是无限集的有限描述。这就是它正式的原因


其他各个方面,如语言或语言的演变是不同的问题。这些也可以正式化。

让我先回答你的问题。形式语言的一个很好的非示例是自然语言。英语和斯洛文尼亚语就是例子。塔加洛和塔里菲特·伯伯也是。不幸的是,语言学家似乎没有一个大家都同意的自然语言定义

诺姆·乔姆斯基(Noam Chomsky)在1956年的论文中尝试使用上下文无关的gammars对自然语言进行建模。他在那篇论文中发明了(或者发现了,如果你愿意的话);虽然他没有这样称呼他们;虽然它们对英语建模没有帮助,但它们却彻底改变了计算机科学

形式上,形式语言只是有限字母表上的一组字符串。就这样

示例包括所有有效的C程序、所有有效的HTML文件、所有有效的XML文件、所有“平衡”括号字符串(例如,
(),(),(())()(())(),…
),所有始终停止的确定性图灵机的集合(某些编码下的代码),所有可以用
k
颜色着色的简单图形的集合(实际上是在某种编码下的代码),以
1
结尾和开头的所有二进制字符串的集合,等等

有些使用正则表达式(或者,相当于DFA)很容易识别;有些使用DFA无法识别,但可以使用PDA识别(或者,相当于,可以使用上下文无关语法进行描述);另一些不接受这种描述,但可以由图灵机识别;有些甚至连图灵机都无法识别(称为不可计算)

这就是为什么这个定义如此有用的原因。我们每天在CS中遇到的许多事情都可以用正式语言来表达


为了更好地介绍这门学科,我强烈推荐霍普克罗夫特等人的《自动机理论、语言和计算导论》这本极好的书。

你不能用上下文无关语法来描述正式语言……你有时需要更强大的机器。我从来没有说过生产系统的左侧必须是单符号。如果你愿意,它甚至可以是epsilon。好吧,让
T
成为所有确定性图灵机的集合,它们总是在有限的步骤后停止(在每个输入上)。给我一个描述。我会等。:)当你说你会等的时候,你的意思是你甚至不吃东西:)?我在关于形式性的陈述中添加了“有时”,以反映并非所有的集合都是可接受的。我投票将这个问题作为离题来结束,因为它不是关于在这个术语的应用范围内编程的。@HighPerformanceMark,这太糟糕了,因为在我看来,最近的电视节目缺少很多有趣的问题。