拥有语言的规范表示通常很方便(在我的情况下,它们通常是特定领域的语言);但是,我相信所涉及的语言的表达能力有严格的限制,这些语言决定了是否可以为该语言的任意程序确定和/或创建规范形式。不幸的是,我一直找不到我(模糊地)记得在其中读过的参考资料。
一方面,创建语言的规范表示与许多硬图问题(例如:图同构)具有相当的复杂性似乎是合理的,但另一方面,iirc、gcc、yhc 和 ghc 等编译器使用中间表示生成各种格式的输出(程序集、javascript 等),所以这至少在某些形式下是一个已解决的问题。
何时可以确定/生成给定语言的规范形式?(该语言的表达能力如何,语言表达能力如何影响规范形式的效用?)如果可能,请提供参考或证明。
编辑:例如,正则语言(例如:正则表达式的“纯”形式)不能表达图灵完备语言所能表达的许多相同的东西。换句话说,您不能用常规语言编写 Web 服务器,但可以使用 lambda 演算)。我的问题是关于理论上的可能性,并且确实有与复杂性理论有关的具体答案。如果我有一个 DSL 需要传输到另一个系统,那么在传输它之前生成该代码的规范形式通常是有益的,因为这将解耦两个不同系统使用的独立表示。 然而,如果将图灵完备语言翻译成规范形式是 P-Space 完备或 NP-Complete,那么您不应该浪费时间尝试构建规范形式——要么找到另一种方法,要么减少可以在多项式时间内规范化的语言复杂性。