Cette question est juste quelque chose que je pensais récemment. Une langue de programmation peut-elle être écrite dans cette langue comme une seconde mise en œuvre? par exemple. Java. Est-il possible de réécrire la langue de programmation Java à l'aide du langage de programmation Java? P>
excuses s'il s'agit d'une question idiote mais j'ai besoin de savoir! p>
gf p>
13 Réponses :
TOUJOURS. Tout Turing-complet Language est - bien - une langue complète de Turing. Si vous pouvez écrire le compilateur dans une langue complète, vous pouvez l'écrire dans n'importe quelle langue équivalente. P>
Même certaines langues complètes de Turing peuvent avoir des limitations, en fonction de ce que nous entendons par «mise en œuvre». Imaginez une langue Turing-Complete qui ne peut saisir que l'entrée et la sortie du texte ASCII uni. Une telle langue serait incapable de produire un binaire exécutable et ne serait donc pas en mesure de construire son propre interprète "autonome".
Fichiers texte ASCII exécutable
oui. Tant que la langue est terminée, vous pouvez mettre en œuvre la langue en soi. P>
Turing-Telopesseness n'est pas strictement une exigence IIRC. Mais les langues existantes-incomplètes de Turing-incomplètes (regex, SQL et telles) sont toujours insuffisantes.
Vous pouvez lire une regex à l'aide de Regex, mais je pense qu'il est impossible de créer une implémentation de regex en l'utilisant. L'exhaustivité Turing est la théorie, afin d'écrire un compilateur Java, vous devez manipuler des bits et écrire sur le disque (Java peut le faire).
@TOvent: En fait, vous ne pouvez même pas
@Seva je ne voulais pas impliquer que c'était une exigence stricte; Juste que si une langue est terminée, alors ce que l'op suggère est possible. :)
@Blueraja - Danny Pflughoeftft: Vous êtes absolument pluvieux, je n'ai pas pensé au fait que la Regex Laguerage n'est pas régulière avec des constructions telles que la parenthèse correspondante.
Oui, c'est possible. Découvrez bootstrapping . P>
+1 Je faisais mon cerveau (et je vais sur Google) pour rechercher ce terme. Je me suis vaguement rappelé que quelque chose à propos de C compilateurs C est mis en œuvre successivement en soi.
Cela peut non seulement, c'est. ECJ (Compilateur d'Eclipse) est un exemple et je pense que le SDK lui-même est livré avec un pure compilateur Java, bien que je puisse me tromper à ce sujet. P>
Oui pour toute langue complète Turing. Lisp vous vient à l'esprit comme l'une des langues les plus faciles à écrire un interpréteur / compilateur pour lui-même. P>
Il existe de nombreux exemples pratiques, un exemple est l'oberon, qui présente un intérêt pour cette discussion, car le code du compilateur est très lisible, c'est dans le projet de lecture Oberon disponible gratuitement: P>
http://www.oberon.thz.ch/bibliographie/publications p>
http://fr.wikipedia.org/wiki/bootstrapping_(Compilers) a> p>
ça peut. Un exemple récent est que Python a Pypy . Un peu plus d'informations est sur la page Wikipedia et de bons liens. P>
AFAIK PYPY n'interprète pas, cela compilait le VM.
Pypy est l'interpréteur python écrit dans un sous-ensemble réduit de Python (Rpython). Cependant, le projet peut construire une version C et même un JITC de traçage en effectuant des transformations sur la source de Rpython.
Oui mais Pypy peut interpréter le VM étant conçu?
Bien sûr. J'ai même vu quelqu'un écrit un compilateur Cobol écrit à Cobol! (OK, pas un compilateur complet ... mais au moins un parseur.) P>
Bien sûr. P>
Il y a beaucoup de nombreuses années, un de mes premiers ordinateurs à domicile, un VIC 20, est venu avec un interprète de base intégré, mais c'était là. J'ai donc écrit la première version d'un assembleur pour celui-ci en basique. Ensuite, j'ai utilisé mon premier assembleur primitif pour écrire un meilleur assembleur. P>
@monojohnny Les cartes Punch reviennent. Ce truc de lecteur USB est juste une fad. :-)
Les compilateurs de la GCC sont écrits en C. P>
Cela fait longtemps que quiconque a construit des compilateurs C de l'assemblage. P>
écrire un compilateur Java en Java - pas de problème du tout. En fait, je pense que Javac de Sun est écrit en Java. P>
Cependant, «Java» signifie généralement plus de choses que de Javac, votre question n'est donc pas très claire. P>
Pas seulement possible, mais pour les compilateurs de code natif, il s'agit de la technique de mise en œuvre la plus courante forte>. Un bon guide sur le mode de plan d'Andrew Appel Bootstrage axiomatique: guide pour les pirates de compilateur . P>