我试图找到一个简单的(即非正式的)解释,正如乔姆斯基所阐述的4级正式语法(无限制,上下文敏感,无上下文,常规)。
自从我学习正式语法以来,这已经是一个时代了,现在各种各样的定义让我难以想象。要明确的是,我不正在寻找您可以在任何地方找到的正式定义(例如here和here - 我可以谷歌以及其他任何人),或者甚至是任何形式的正式定义。相反,我希望找到的是干净简单的解释,为了完整起见,不要牺牲清晰度。
答案 0 :(得分:17)
如果你还记得生成这些语言的自动机,也许你会更好地理解。
常规语言由常规自动机生成。他们只对过去有了一定的了解(他们的计算内存有限制)所以每当你有一个带有后缀的语言时,这取决于前缀(回文语言),这不能用常规语言来完成。
无上下文语言由非确定性下推自动机生成。他们对过去有一种了解(堆栈,与常规自动机不同,但堆栈只能从顶部查看,因此您无法完全了解过去。
上下文相关语言由线性绑定的非确定性图灵机生成。他们了解过去,可以处理不同的情境,因为它们是非确定性的,可以随时访问所有过去。
不受限制的语言由图灵机生成。根据Church-Turing-Thesis,图灵机能够计算出你能想象到的一切(这意味着一切都可以判断)。
答案 1 :(得分:2)
对于常规语言,有许多等效的特征。他们提供了许多不同的方式来查看常规语言。很难给出“普通英语”的定义,如果你发现很难理解常规语言的任何特征,那么“简单的英语”解释就不太可能有所帮助。从定义和各种闭包属性中要注意的一点是,常规语言以某种方式体现了“有限性”的概念。但如果不熟悉常规语言,这又难以理解。
你觉得有限自动机的概念不简单干净吗?
让我提一下许多等价的特征(至少对其他读者来说):
答案 2 :(得分:0)
常规:这些语言使用有限自动机回答是/否
无上下文:这些语言在给定输入词时(使用状态机制和堆栈)我们总是可以回答是/否如果它是语言的成员
语境敏感:只要语法中的生成从不收缩(α - >β),我们就可以回答是/否(使用状态机制和大小与输入大小呈线性的内存块)
递归可枚举:它可以回答是,但如果不是,它将进入无限循环
请参阅this视频以获取完整说明。