Il est souvent utile d'avoir une représentation canonique d'une langue (dans mon cas, ce sont généralement des langues spécifiques au domaine); cependant, je crois qu'il y a des limites strictes sur l'expressivité des langues impliquées qui déterminent si une forme canonique peut être déterminée et/ou créée pour un programme arbitraire dans cette langue. Malheureusement, j'ai été incapable de trouver les références que je me rappelle (vaguement) lire à ce sujet.Quelle est la complexité générale de la construction d'une représentation de langage canonique?
D'une part, il semble raisonnable que la création d'une représentation canonique d'un langage soit d'une complexité comparable à celle de nombreux problèmes de graphes durs. (par exemple: isomorphisme graphique), mais d'un autre côté, iirc, les compilateurs comme gcc, yhc et ghc utilisent des représentations intermédiaires pour générer des sorties dans différents formats (assemblage, javascript, etc.), donc au moins sous certaines formes, un problème résolu.
Quand est-il possible de déterminer/générer une forme canonique pour une langue donnée? (Dans quelle mesure cette langue peut-elle être expressive et comment l'expressivité du langage influence-t-elle l'utilité des formes canoniques?) Veuillez fournir des références ou des preuves si cela est possible.
Edit: Par exemple, un Regular Language (par exemple: la forme 'pure' des expressions régulières) ne peut pas exprimer un grand nombre des mêmes choses qu'un Turing-complete language can. En d'autres termes, vous ne pouvez pas écrire un serveur web dans une langue régulière, mais vous pouvez le faire avec un calcul lambda). Ma question concerne les possibilités théoriques et a une réponse spécifique à la théorie de la complexité. Si j'ai un DSL qui doit être transmis à un autre système, il sera souvent utile de générer une forme canonique de ce code avant de le transmettre, car cela découplera les représentations indépendantes utilisées par les deux systèmes différents. Cependant, si c'est P-Espace complet, ou NP-complet pour traduire un langage complet de Turing en une forme canonique, alors vous ne devriez pas perdre de temps à essayer de construire une forme canonique - soit trouver une autre façon de le faire , ou réduire la complexité du langage à quelque chose que peut canaliser en temps polynomial.
N'essayant pas d'être l'orthographe nazie ici, mais ne devrait pas être écrit avec un n? "canonique"? ;) – Mecki
Cette question semble trop mal spécifiée pour avoir une réponse. Je ne suis pas vraiment sûr de ce que vous demandez, même si je sais ce que tous les mots veulent dire. – Marcin
@Mecki merci! Correction de la faute de frappe. – rcreswick