在计算机科学中,什么不是正式语言?
In computer science, what is NOT a formal language?
在维基百科https://www.wikiwand.com/en/Formal_language上,我找到了一种形式语言的定义:
In mathematics, computer science, and linguistics, a formal language
is a set of strings of symbols that may be constrained by rules that
are specific to it.
这对我来说看起来很抽象。我无法想象任何不符合这个定义的语言。有没有人知道 非正式语言 是什么样子以及它如何不符合定义?
英语不是正式语言。它不仅仅是一组字符串;它有口语形式,随着时间的推移而演变,有方言,以及正式语言所没有的各种其他东西。从十年到下一个十年,正式语言无法获得 "email" 这个词。
语言是由给定符号组成的一组序列。它可以是有限的,也可以是无限的(英语句子的集合是无限的,即使有句子,例如过长,即使是母语人士也无法理解)。如果它是有限的,那么对它的任何描述都是正式定义。
如果语言是无限的,比如涉及数字、两个二元运算符“+”、“*”和变量的算术表达式的语言,那么你不可能列出属于该语言的所有字符串,但有时 (请参阅下面的 blazs 评论)你可以给出一个有限的描述作为一组规则。
E := 数量 | v | E '+' E | E'*'E
(其中NUM是数字序列,v是变量)是对无限集的有限描述。这就是它正式的原因。
语音或语言的演变等其他各个方面是不同的问题。这些也可以形式化。
让我先回答你的问题。 自然 语言是一种很好的非形式语言示例。英语和斯洛文尼亚语就是例子。他加禄语和塔里菲特柏柏尔语也是如此。不幸的是,语言学家似乎没有一个所有人都同意的自然语言定义。
诺姆·乔姆斯基 (Noam Chomsky) 在 1956 年的论文 Three Models for the Description of Language 中尝试使用上下文无关的语法对自然语言进行建模,这是一个著名的尝试。他在那篇论文中发明(或发现,如果你愿意的话)它们;尽管他没有那样称呼他们;虽然它们对英语语言建模没有用,但它们彻底改变了计算机科学。
形式上,形式语言只是有限字母表上的一组字符串。就是这样。
示例包括所有有效的 C 程序、所有有效的 HTML 文件、所有有效的 XML 文件、所有 "balanced" 括号的字符串(例如 (), ()(), ((()))()(()), ...
)、集合(某种编码下的代码)总是停止的所有确定性图灵机,所有可以用 k
颜色着色的简单图形的集合(实际上是它们在某种编码下的代码),所有结束的二进制字符串的集合并以 1
等开头
有些可以使用正则表达式(或等效的 DFA)轻松识别;有些无法使用 DFA 识别,但可以使用 PDA 识别(或者,等效地,可以用上下文无关语法来描述);别人不承认这样的描述,但是可以被图灵机识别;有些甚至连图灵机都无法识别(称为不可计算)。
这就是该定义如此有用的原因。我们每天在 CS 中遇到的很多事情都可以用形式语言来表达。
为了很好地介绍该主题,我强烈推荐 Hopcroft 等人撰写的精湛书籍 自动机理论、语言和计算导论
在维基百科https://www.wikiwand.com/en/Formal_language上,我找到了一种形式语言的定义:
In mathematics, computer science, and linguistics, a formal language is a set of strings of symbols that may be constrained by rules that are specific to it.
这对我来说看起来很抽象。我无法想象任何不符合这个定义的语言。有没有人知道 非正式语言 是什么样子以及它如何不符合定义?
英语不是正式语言。它不仅仅是一组字符串;它有口语形式,随着时间的推移而演变,有方言,以及正式语言所没有的各种其他东西。从十年到下一个十年,正式语言无法获得 "email" 这个词。
语言是由给定符号组成的一组序列。它可以是有限的,也可以是无限的(英语句子的集合是无限的,即使有句子,例如过长,即使是母语人士也无法理解)。如果它是有限的,那么对它的任何描述都是正式定义。
如果语言是无限的,比如涉及数字、两个二元运算符“+”、“*”和变量的算术表达式的语言,那么你不可能列出属于该语言的所有字符串,但有时 (请参阅下面的 blazs 评论)你可以给出一个有限的描述作为一组规则。
E := 数量 | v | E '+' E | E'*'E
(其中NUM是数字序列,v是变量)是对无限集的有限描述。这就是它正式的原因。
语音或语言的演变等其他各个方面是不同的问题。这些也可以形式化。
让我先回答你的问题。 自然 语言是一种很好的非形式语言示例。英语和斯洛文尼亚语就是例子。他加禄语和塔里菲特柏柏尔语也是如此。不幸的是,语言学家似乎没有一个所有人都同意的自然语言定义。
诺姆·乔姆斯基 (Noam Chomsky) 在 1956 年的论文 Three Models for the Description of Language 中尝试使用上下文无关的语法对自然语言进行建模,这是一个著名的尝试。他在那篇论文中发明(或发现,如果你愿意的话)它们;尽管他没有那样称呼他们;虽然它们对英语语言建模没有用,但它们彻底改变了计算机科学。
形式上,形式语言只是有限字母表上的一组字符串。就是这样。
示例包括所有有效的 C 程序、所有有效的 HTML 文件、所有有效的 XML 文件、所有 "balanced" 括号的字符串(例如 (), ()(), ((()))()(()), ...
)、集合(某种编码下的代码)总是停止的所有确定性图灵机,所有可以用 k
颜色着色的简单图形的集合(实际上是它们在某种编码下的代码),所有结束的二进制字符串的集合并以 1
等开头
有些可以使用正则表达式(或等效的 DFA)轻松识别;有些无法使用 DFA 识别,但可以使用 PDA 识别(或者,等效地,可以用上下文无关语法来描述);别人不承认这样的描述,但是可以被图灵机识别;有些甚至连图灵机都无法识别(称为不可计算)。
这就是该定义如此有用的原因。我们每天在 CS 中遇到的很多事情都可以用形式语言来表达。
为了很好地介绍该主题,我强烈推荐 Hopcroft 等人撰写的精湛书籍 自动机理论、语言和计算导论