我在阅读有关Iota和Jot的文章,发现本节令人困惑:
与Iota不同,在Iota中,字符串的语法树可以在左侧或右侧分支,而Jot语法统一在左分支。结果,Iota完全不受上下文限制,但Jot是常规语言。
我的理解是Iota和Jot都完成了。但显然,一个是上下文无关的,另一个是常规的!常规语言肯定不能完善图灵吗?
1*0
是一门普通的语言;-)尽管对于程序员或编译器-编写者而言都不是一种非常友好的编程语言。
我在阅读有关Iota和Jot的文章,发现本节令人困惑:
与Iota不同,在Iota中,字符串的语法树可以在左侧或右侧分支,而Jot语法统一在左分支。结果,Iota完全不受上下文限制,但Jot是常规语言。
我的理解是Iota和Jot都完成了。但显然,一个是上下文无关的,另一个是常规的!常规语言肯定不能完善图灵吗?
1*0
是一门普通的语言;-)尽管对于程序员或编译器-编写者而言都不是一种非常友好的编程语言。
Answers:
简而言之,答案是肯定的。
但是,您正在混淆术语“语言”的两种完全不相关的含义(是的,这很令人困惑):
请注意,您可以使用“语言”一词的两种不相关的含义,从两个完全不相关的观点谈论“ C ++语言”:
从这两种观点来看,“ C ++语言”的特性是无关的。
更多示例可帮助您区分这些概念:
(([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*
是,这是一种常规语言,能够描述任何0类语言的语法
尽管Jot的法律计划很固定,但Jot本身是图灵完备的。这意味着每个可计算函数都可以用Jot表示。我们甚至可以提出一种语言,其中所有二进制字符串都合法,但是该语言本身是图灵完整的(练习)。您会混淆语法和语义。
顺便说一句,上下文无关的语言(可能)也不是NP完整的,因为它们具有多项式时间解析算法。
如果一种编程语言的表达能力足以指定Turing机器可计算的每个函数,那么它就是图灵完备的。在这里,我们正在讨论 的特定语言的力量在编程语言。例如,用Python编写图灵机的解释器并不难,因此Python是图灵完备的编程语言。
编程语言的语法,即与该编程语言中的有效程序相对应的字符串集,本身就是一种语言。例如,考虑所有可能的Python程序的集合。编程语言的语法可以是上下文相关的,上下文无关的, 常规的等。我们对检查给定的字符串在编程语言中是否为有效程序的困难(这由编译器/解释器完成)感兴趣。当我们说一种编程语言的语法是无上下文的时,这意味着它的语法有无上下文的语法,并且意味着存在下推式自动机来检查程序的有效性,
注意,一种编程语言的语法的简单性并不意味着对该种编程语言中指定的程序的计算能力的限制。
答案是肯定的。您会看到,正如公认的答案所述,语法与其含义无关。用乔姆斯基自己的话说:
我认为我们被迫得出这样的结论:语法是自主的并且独立于含义。
乔姆斯基,句法结构(1956)
如果一个语法可以产生足够的句子来描述所有可以计算的事物,那么我们可以将其句子的计算意义任意分配给每个可以计算的事物。
作为一个实际的例子,流行语言whitespace
具有规则的语法甚至可能是常规的x86 assembly languages
(需要验证)。