Je lisais sur Iota et Jot et j'ai trouvé cette section déroutante:
Contrairement à Iota, où l'arbre syntaxique d'une chaîne peut se ramifier à gauche ou à droite, la syntaxe Jot est uniformément ramifiée à gauche. Par conséquent, Iota est strictement sans contexte, mais Jot est un langage régulier.
Je crois comprendre qu'Iota et Jot sont tous les deux Turing complets. Mais apparemment, l'un est sans contexte et l'autre est régulier! Certes, les langues normales ne peuvent pas être complètes.
1*0
c'est un langage normal ;-) Bien que ce ne soit pas un langage de programmation très convivial, ni pour le programmeur ni pour le compilateur-rédacteur.Réponses:
Bref, la réponse est oui.
Mais vous mélangez deux significations totalement indépendantes du terme "langage" (oui, cela prête à confusion):
Notez que vous pouvez parler du «langage C ++» à partir de deux points de vue totalement indépendants, en utilisant les deux significations indépendantes du mot «langage»:
Les traits du «langage C ++» de ces deux points de vue ne sont pas liés.
Plus d'exemples pour vous aider à séparer ces concepts:
la source
(([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*
s'agit d'un langage régulier capable de décrire la grammaire de n'importe quelle langue de la classe 0Bien que l'ensemble des programmes juridiques de Jot soit régulier, Jot lui-même est Turing-complete. Cela signifie que chaque fonction calculable peut être exprimée en Jot. Nous pouvons même proposer un langage dans lequel toutes les chaînes binaires sont légales, mais le langage lui-même est Turing complet (exercice). Vous confondez la syntaxe et la sémantique.
Soit dit en passant, les langages sans contexte ne sont également (probablement) pas NP-complets, car ils ont un algorithme d'analyse temporelle polynomiale.
la source
La syntaxe seule (telle qu'encodée dans les arbres de syntaxe) des langages de programmation modernes est loin de tout ce qu'ils font. En fait, les langages formels définis par l'ensemble de tous les programmes dans un langage donné qui se compilent sans erreur sont rarement même sans contexte .
Facteur sémantique statique et dynamique dans l'équation. Ils sont invisibles dans l'arbre de syntaxe mais déterminent si un morceau de code est en fait un programme et ce qu'il calcule. En bout de ligne, le resp sans contexte. le langage formel régulier qui est défini par la "syntaxe" donne une surapproximation du langage de programmation.
Maintenant, pour répondre à votre question: oui, c'est possible. Considérons, par exemple, toute numérotation Gödel des machines Turing; vous obtenez le "langage de programmation" de tous les nombres naturels, chacun représentant une MT. Certes, ce n'est pas une langue agréable à programmer, mais c'est certainement une langue Turing-complète qui est régulière - triviale, même.
la source
Un langage de programmation est Turing-complet s'il est suffisamment expressif pour spécifier chaque fonction calculable par les machines Turing. Nous discutons ici de la puissance des langages spécifiés dans les langages de programmation . Par exemple, il n'est pas difficile d'écrire un interpréteur pour les machines Turing en Python, donc Python est un langage de programmation complet de Turing.
La syntaxe d'un langage de programmation , c'est-à-dire l'ensemble de chaînes correspondant à des programmes valides dans le langage de programmation, est elle-même un langage. Par exemple, considérez l'ensemble de tous les programmes Python possibles. La syntaxe d'un langage de programmation peut être contextuelle , sans contexte , régulière , etc. Nous nous intéressons à la difficulté de vérifier qu'une chaîne donnée est un programme valide dans le langage de programmation (ceci est fait par des compilateurs / interprètes). Lorsque nous disons que la syntaxe d'un langage de programmation est sans contexte, cela signifie qu'il existe une grammaire sans contexte pour sa syntaxe et implique qu'il existe des automates déroulants pour vérifier la validité des programmes,
Notez que la simplicité de la syntaxe d'un langage de programmation n'implique pas une restriction sur la puissance de calcul des programmes spécifiés dans ces langages de programmation.
la source
La réponse est oui. Vous voyez, comme l'indique la réponse acceptée, une grammaire est indépendante de sa signification. Selon les propres mots de Chomsky:
Si une grammaire peut produire suffisamment de phrases pour décrire toutes les choses qui peuvent être calculées, nous pouvons attribuer arbitrairement une signification informatique à ses phrases - une pour chaque chose qui peut être calculée.
Quant à un véritable exemple concret, la langue populaire
whitespace
a une grammaire régulière et peut-être mêmex86 assembly languages
(à vérifier).la source