Apprendre à écrire un compilateur

voix
699

Langues préférées : C / C ++, Java et Ruby.

Je cherche des livres / tutoriels utiles sur la façon d'écrire votre propre compilateur simplement à des fins éducatives. Je suis plus familier avec C / C ++, Java et Ruby, donc je préfère les ressources qui impliquent un de ces trois, mais une bonne ressource est acceptable.

Créé 04/08/2008 à 23:46
source utilisateur
Dans d'autres langues...                            


40 réponses

voix
1k

Grande Liste des ressources:

Légende:

  • ¶ Lien vers un fichier PDF
  • $ Lien vers un livre imprimé
Créé 04/08/2008 à 23:52
source utilisateur

voix
69

C'est une question assez vague, je pense; juste à cause de la profondeur du sujet concerné. Un compilateur peut être décomposé en deux parties distinctes, cependant; une moitié supérieure et une partie inférieure de l'un. La moitié supérieure prend généralement la langue source et la convertit en une représentation intermédiaire, et la moitié inférieure prend en charge la génération du code spécifique de plate-forme.

Néanmoins, une idée pour un moyen facile d'aborder ce sujet (celui que nous avons utilisé dans ma classe de compilateurs, au moins) est de construire le compilateur dans les deux pièces décrites ci-dessus. Plus précisément, vous aurez une bonne idée de l'ensemble du processus par la simple construction de la moitié supérieure.

Il suffit de faire la moitié supérieure vous permet d'obtenir l'expérience de l'écriture de l'analyseur lexical et l'analyseur et passez à générer une « code » (que la représentation intermédiaire je l'ai mentionné). Il faudra donc votre programme source et le convertir à une autre représentation et faire un peu d'optimisation (si vous voulez), qui est au cœur d'un compilateur. La moitié inférieure prendra alors que la représentation intermédiaire et générer les octets nécessaires pour exécuter le programme sur une architecture spécifique. Par exemple, le la moitié inférieure prendra votre représentation intermédiaire et générer un exécutable PE.

Quelques livres sur ce sujet que je trouve particulièrement utile était Principes et techniques Compilateurs (ou le Livre du Dragon, en raison du dragon mignon sur la couverture). Il a obtenu une grande théorie et couvre certainement Grammars-contexte d'une manière vraiment accessible. En outre, pour la construction de l'analyseur lexical et analyseur, vous utiliserez probablement le * outils nix LEX et YACC. Et assez uninterestingly, le livre intitulé « lex et yacc » ramassé où le dragon livre laissé pour cette partie.

Créé 21/07/2009 à 00:01
source utilisateur

voix
54

Je pense que la mise en œuvre du compilateur moderne en ML est le meilleur texte d'écriture du compilateur d'introduction. Il y a une version Java et une version C aussi, que ce soit qui pourrait être plus accessible compte tenu de votre arrière - plan des langues. Le livre emballe beaucoup de matériel de base utile (numérisation et l' analyse, l' analyse sémantique, les enregistrements d'activation, la sélection d'instruction, génération de code natif RISC et x86) et divers sujets « avancés » (compilation OO et langages fonctionnels, le polymorphisme, la collecte des déchets, l' optimisation et forme unique d'affectation statique) dans l' espace relativement peu (~ 500 pages).

Je préfère la mise en œuvre du compilateur moderne du livre de dragon parce que les enquêtes de mise en œuvre moderne compilateur moins du champ - à la place, il a une couverture très solide de tous les sujets que vous auriez besoin d'écrire un compilateur sérieux, décent. Une fois que vous travaillez à travers ce livre, vous serez prêt à aborder les documents de recherche directement pour plus de profondeur si vous en avez besoin.

Je dois avouer que j'ai un faible sérieux de Niklaus Wirth Construction compilateur. Il est disponible en ligne au format PDF. Je trouve l'esthétique de programmation de Wirth tout simplement magnifique, mais certaines personnes trouvent son style trop minime (par exemple Wirth favorise parseurs descente récursive, mais la plupart des cours CS se concentrer sur les outils de générateur d'analyseur;. Conceptions linguistiques Wirth sont assez conservateurs) compilateur de construction est une distillation très succincte des idées de base de Wirth, donc si vous aimez son style ou non ou non, je vous recommande vivement la lecture de ce livre.

Créé 10/08/2008 à 08:54
source utilisateur

voix
45

Je suis d'accord avec le Dragon livre de référence; OMI, il est le guide à la construction du compilateur. Préparez-vous pour une théorie hardcore, bien que.

Si vous voulez un livre qui est plus léger sur la théorie, jeu Scripting Maîtrise pourrait être un meilleur livre pour vous. Si vous êtes un débutant total à la théorie du compilateur, il offre une introduction plus douce. Elle ne couvre les méthodes d'analyse plus pratiques ( qui optent pour la descente récursive non prédictive sans parler de LL ou parsing LR) non, et je me souviens bien , il ne discute même pas une sorte de théorie de l' optimisation. De plus, au lieu de la compilation en code machine, il compile un bytecode qui est censé fonctionner sur une machine virtuelle que vous écrivez aussi.

Il est encore une lecture correcte, surtout si vous pouvez le ramasser pour pas cher sur Amazon. Si vous voulez seulement une introduction facile dans compilateurs, jeu de script La maîtrise est pas une mauvaise façon d'aller. Si vous voulez aller hardcore avant, alors vous devriez se contenter de rien de moins que le Dragon Book.

Créé 05/08/2008 à 00:08
source utilisateur

voix
28

« Construisons un compilateur » est génial, mais il est un peu vieillot. (Je ne dis pas cela rend encore un peu moins valide.)

Ou consultez SLANG . Ceci est similaire à « Construisons un compilateur » mais est une bien meilleure ressource surtout pour les débutants. Cela vient avec un tutoriel pdf qui utilise une approche en 7 étapes à vous enseigner un compilateur. Ajout du lien Quora comme il les liens vers tous les différents ports argotiers en C ++, Java et JS, aussi les interprètes en Python et Java, à l' origine écrit en C # et la plate - forme .NET.

Créé 04/08/2008 à 23:56
source utilisateur

voix
24

Si vous cherchez à utiliser des outils puissants de haut niveau plutôt que de construire tout vous - même, en passant par les projets et les lectures de ce cours est une option assez bonne. Il est un cours de langues par l'auteur du moteur d'analyse syntaxique Java ANTLR. Vous pouvez obtenir le livre pour le cours en format PDF à partir des programmeurs Pragmatique .

Le cours passe en revue les trucs standard compilateur compilateur que vous verriez ailleurs: l' analyse, les types et la vérification de type, polymorphisme, tables de symboles, et la génération de code. A peu près la seule chose qui ne relève pas est optimisations. Le projet final est un programme qui compile un sous - ensemble de C . Parce que vous utilisez des outils comme ANTLR et LLVM, il est possible d'écrire tout le compilateur en une seule journée (j'ai une preuve de l' existence de ce fait , bien que je signifie ~ 24 heures). Il est lourd sur l' ingénierie pratique en utilisant des outils modernes, un peu plus léger sur la théorie.

LLVM, en passant, est tout simplement fantastique. De nombreuses situations où vous pourriez normalement compiler sous assemblage, vous seriez bien mieux compiler à la représentation intermédiaire de LLVM au lieu. Il est plus haut niveau, multi - plateforme, et LLVM est tout à fait bon pour générer l' assemblage optimisé de celui - ci.

Créé 05/08/2008 à 00:13
source utilisateur

voix
20

Si vous avez peu de temps, je vous recommande « compilateur Construction » de Niklaus Wirth (Addison-Wesley. 1996) , un tout petit livret que vous pouvez lire en un jour, mais il explique les principes de base (y compris la façon de mettre en œuvre lexers, parseurs descente récursive, et vos propres machines virtuelles à base de pile). Après cela, si vous voulez une plongée profonde, il n'y a pas moyen de contourner le livre du Dragon que d' autres intervenants proposent.

Créé 29/08/2010 à 00:14
source utilisateur

voix
17

Vous voudrez peut-être se pencher sur Lex / Yacc (ou Flex / Bison, tout ce que vous voulez les appeler). Flex est un analyseur lexical, qui analysera et identifier les composants sémantiques ( « jetons ») de votre langue, et Bison sera utilisé pour définir ce qui se passe quand chaque jeton est analysé. Cela pourrait être, mais certainement pas limité à, imprimer le code C, pour un compilateur qui compilerait à C, ou en cours d'exécution dynamiquement les instructions.

Cette FAQ devrait vous aider, et ce tutoriel semble très utile.

Créé 20/07/2009 à 23:47
source utilisateur

voix
16

D'une manière générale, il n'y a pas cinq minutes tutoriel pour les statisticiens, car il est un sujet complexe et l'écriture d'un compilateur peut prendre des mois. Vous devrez faire votre propre recherche.

Python et Ruby sont généralement interprétés. Peut-être que vous voulez commencer par un interprète aussi bien. Il est généralement plus facile.

La première étape consiste à écrire une description de langage formel, la grammaire de votre langage de programmation. Ensuite, vous devez transformer le code source que vous voulez compiler ou à interpréter en fonction de la grammaire dans un arbre de syntaxe abstraite, une forme interne du code source que l'ordinateur comprend et peut fonctionner sur. Cette étape est généralement appelée analyse syntaxique et le logiciel qui analyse le code source est appelé un analyseur. Souvent, l'analyseur est généré par un générateur d'analyseur qui transforment une grammaire formelle en code machine source oder. Pour une bonne explication non-mathématique de l'analyse syntaxique Je recommande Techniques Parsing - Un guide pratique. Wikipedia a une comparaison des générateurs d'analyseur à partir duquel vous pouvez choisir celui qui vous convient. Selon le générateur d'analyseur vous avez choisi,

L'écriture d'un analyseur pour votre langue peut être vraiment difficile, mais cela dépend de votre grammaire. Je suggère donc de garder votre grammaire simple (contrairement à C ++); un bon exemple en est LISP.

Dans la seconde étape l'arbre syntaxique abstrait est transformé à partir d'une structure arborescente en une représentation intermédiaire linéaire. Comme un bon exemple pour le bytecode de cette Lua est souvent cité. Mais la représentation intermédiaire dépend vraiment de votre langue.

Si vous construisez un interprète, vous aurez simplement à interpréter la représentation intermédiaire. Vous pouvez également juste à temps compiler. Je recommande LLVM et libjit pour juste à temps la compilation. Pour la langue utilisable, vous aurez également inclure des fonctions d'entrée et de sortie et peut-être une petite bibliothèque standard.

Si vous allez compiler la langue, ce sera plus compliqué. Vous devrez écrire pour différentes architectures backends informatiques et générer du code machine de la représentation intermédiaire dans les backends. Je recommande LLVM pour cette tâche.

Il y a quelques livres sur ce sujet, mais je peux recommander aucun d'entre eux pour un usage général. La plupart d'entre eux sont trop académique ou trop pratique. Il n'y a pas « Enseignez-compilateur écrit en 21 jours » et donc, vous devrez acheter plusieurs livres pour obtenir une bonne compréhension de ce sujet entier. Si vous recherchez l'Internet, vous rencontrerez quelques-uns des livres en ligne et notes de cours. Peut-être il y a une bibliothèque universitaire à proximité vous où vous pouvez emprunter des livres sur les compilateurs.

Je recommande également une bonne connaissance de base dans la théorie de la science informatique théorique et graphique, si vous allez faire de votre projet sérieux. Un diplôme en science informatique sera également utile.

Créé 21/07/2009 à 11:37
source utilisateur

voix
14

Jetez un oeil sur le livre ci - dessous. L'auteur est le créateur de ANTLR .

Langue modèles de mise en œuvre: Créer vos propres langages de programmation spécifiques au domaine et général .

alt texte

Créé 18/05/2010 à 00:38
source utilisateur

voix
11

Un livre pas encore suggéré , mais très important est « linkers et chargeurs » par John Levine. Si vous n'êtes pas en utilisant un assembleur externe, vous aurez besoin d' un moyen de produire un fichier objet qui peut être lié dans votre programme final. Même si vous utilisez un assembleur externe, vous aurez probablement besoin de comprendre les délocalisations et comment le processus de chargement du programme chargé de rendre un outil de travail. Ce livre rassemble beaucoup de traditions au hasard dans ce processus pour différents systèmes, y compris Win32 et Linux.

Créé 18/08/2008 à 21:18
source utilisateur

voix
10

J'ai trouvé le livre de dragon beaucoup trop difficile à lire avec trop l'accent sur la théorie du langage qui n'est pas vraiment nécessaire d'écrire un compilateur dans la pratique.

Je voudrais ajouter le Oberon livre qui contient la source complète d'un compilateur Oberon étonnamment simple et rapide du projet Oberon .

Alt text

Créé 09/08/2010 à 19:33
source utilisateur

voix
10

Si vous êtes prêt à utiliser LLVM, vérifier cela: http://llvm.org/docs/tutorial/ . Il vous apprend comment écrire un compilateur à partir de zéro en utilisant le cadre de LLVM, et ne présumez pas que vous avez des connaissances sur le sujet.

Le tutoriel vous suggère d'écrire votre propre analyseur et lexer etc, mais je vous conseille de regarder dans bison et flex une fois que vous avez l'idée. Ils rendent la vie beaucoup plus facile.

Créé 20/08/2008 à 11:01
source utilisateur

voix
10

Dragon livre est sans aucun doute le livre « construction de compilateurs », mais si votre langue est pas aussi compliqué que la génération actuelle des langues, vous pouvez regarder le modèle de l' interprète de modèles de conception .

L'exemple dans le livre dessine une langue régulière comme expression et est bien pensé, mais comme on dit dans le livre, il est bon de penser à travers le processus, mais est efficace en réalité que sur les petites langues. Cependant, il est beaucoup plus rapide d'écrire un interprète pour une petite langue avec ce modèle que d'avoir à se renseigner sur tous les différents types de parseurs, yacc et lex, et ainsi de suite ...

Créé 05/08/2008 à 17:16
source utilisateur

voix
9

Je me souviens pose cette question il y a environ sept ans quand je suis plutôt nouveau à la programmation. Je faisais très attention quand j'ai demandé et étonnamment je n'ai pas autant la critique que vous obtenez ici. Ils me ont pointent cependant dans la direction du « dragon Livre » qui est à mon avis, un livre vraiment super qui explique tout ce que vous devez savoir pour écrire un compilateur (vous aurez bien sûr de maîtriser une langue ou deux. Plus langues que vous savez, on est de fous.).

Et oui, beaucoup de gens disent lire ce livre est fou et vous n'apprendra rien de lui, mais je suis en désaccord avec tout cela.

Beaucoup de gens disent aussi que l'écriture des compilateurs est stupide et inutile. Eh bien, il y a un certain nombre de raisons pour lesquelles le développement du compilateur sont utiles: - Parce que c'est amusant. - Il est éducatif, pour apprendre à écrire des compilateurs, vous apprendrez beaucoup sur l'informatique et d'autres techniques qui sont utiles lors de l'écriture d'autres applications. - Si personne a écrit compilateurs les langues existantes ne faire mieux.

Je n'ai pas écrit mon propre compilateur tout de suite, mais après avoir demandé que je savais où commencer. Et maintenant, après avoir appris plusieurs langues et la lecture du livre Dragon, l'écriture est pas un gros problème. (J'étudie également atm d'ingénierie informatique, mais la plupart de ce que je sais sur la programmation est autodidacte.)

En conclusion: - The Dragon Book est un grand "tutoriel". Mais passer du temps la maîtrise d'une langue ou deux avant d'essayer d'écrire un compilateur. Ne vous attendez pas à être un gourou du compilateur au sein de la prochaine décennie si.

Le livre est aussi bon si vous voulez apprendre comment écrire / parseurs interprètes.

Créé 06/08/2009 à 23:37
source utilisateur

voix
9

Je cherche dans le même concept, et trouvé cet article prometteur par Joel Pobar,

Créer un compilateur de langue pour le .NET Framework

il discute un concept de haut niveau d'un compilateur et procède à inventer son propre langauge pour le framework .Net. Bien que son but au Net Framework, bon nombre des concepts devrait pouvoir être reproduit. L'article couvre:

  1. définition Langauge
  2. Scanner
  3. Parser (le bit im principalement intéressé)
  4. Le ciblage du Net Framework Le
  5. Générateur de code

il y a d'autres sujets, mais vous obtenez juste.

Son but aux gens de commencer, écrit en C # (pas tout à fait Java)

HTH

des os

Créé 31/12/2008 à 00:01
source utilisateur

voix
9

« ... Construisons un compilateur ... »

J'avais deuxième http://compilers.iecc.com/crenshaw/ par @sasb . Oubliez acheter plus de livres pour le moment.

Pourquoi? Outils et langue.

La langue souhaitée est Pascal et si je me souviens bien est basé sur Turbo-Pascal. Il se trouve si vous allez à http://www.freepascal.org/ et télécharger le compilateur Pascal tous les exemples fonctionnent directement à partir de la page ~ http://www.freepascal.org/download.var La chose beaut sur Free Pascal est que vous pouvez l' utiliser presque tout processeur ou système d' exploitation que vous pouvez prendre soin de.

Une fois que vous aurez maîtrisé les leçons essayez le plus avancé « du Dragon Book » ~ http://en.wikipedia.org/wiki/Dragon_book

Créé 20/08/2008 à 12:28
source utilisateur

voix
8

De la FAQ de comp.compilers :

"Programmation d'un ordinateur" par Per Hansen Brinch Prentice-Hall 1982 ISBN 0-13-730283-5

Ce livre, malheureusement, intitulé explique la conception et à la création d'un environnement de programmation mono-utilisateur pour micro-ordinateurs, en utilisant un langage comme Pascal appelé Edison. L'auteur présente tout le code source et les explications pour la mise en œuvre étape par étape d'un compilateur Edison et d'un système d'exploitation simple soutien, tout écrit dans Edison lui-même (à l'exception d'un petit noyau de soutien écrit dans un assembleur symbolique pour PDP 11/23; le la source complète peut également être commandé pour le PC IBM).

Les choses les plus intéressantes au sujet de ce livre sont: 1) sa capacité à démontrer comment créer un système complet, autonome, auto-maintien, compilateur utile et le système d'exploitation, et 2) la discussion intéressante de conception des problèmes linguistiques et spécifications et au commerce offs au chapitre 2.

"Brinch Hansen sur Pascal Compilateurs" par Per Hansen Brinch Prentice-Hall 1985 ISBN 0-13-083098-4

Une autre lumière sur la théorie lourde sur here's-faire pragmatique à ce code-livre. L'auteur présente la conception, la mise en œuvre, et le code source complet pour un compilateur et un interprète p-code pour Pascal-(Pascal « moins »), un sous-ensemble Pascal avec des types de booléens et entiers (mais pas de caractères, nombres réels, subranged ou types énumérés) , constante et définitions variables et tableau et types d'enregistrement (mais pas emballé, variante, ensemble, pointeur, sans nom, rebaptisés ou types de fichiers), des expressions, des instructions d'affectation, les définitions de procédures imbriquées avec des paramètres de valeur et variables, si les déclarations, alors que les déclarations, et des blocs de début-fin (mais pas de définitions de fonctions, des paramètres de procédure, les instructions goto et les étiquettes, les états de cas, les déclarations de répétition, des états et des états).

Le compilateur et interprète sont écrits en Pascal * (Pascal « étoiles »), un sous-ensemble Pascal étendu avec quelques fonctionnalités de style Edison pour la création de systèmes de développement de logiciels. Un compilateur Pascal * pour l'IBM PC est vendu par l'auteur, mais il est facile au port compilateur du livre de Pascal-à toute plate-forme Pascal pratique.

Ce livre fait la conception et la mise en œuvre d'un compilateur semble facile. J'aime particulièrement la façon dont l'auteur se préoccupe de la qualité, la fiabilité et les essais. Le compilateur et interprète peut facilement être utilisé comme base pour un projet de langue plus impliqués ou compilateur, surtout si vous êtes pressé d'obtenir rapidement quelque chose et en cours d'exécution.

Créé 26/06/2010 à 21:17
source utilisateur

voix
8

Vous devriez vérifier « de Darius Bacon de ichbins », ce qui est un compilateur pour un petit dialecte Lisp, le ciblage C, en un peu plus de 6 pages de code. L'avantage qu'il a sur la plupart des compilateurs de jouets est que la langue est assez complet que le compilateur est écrit en elle. (Le tarball comprend également un interprète pour amorcer la chose.)

Il y a plus de choses sur ce que j'ai trouvé utile pour apprendre à écrire un compilateur sur mon Ur-Scheme page web.

Créé 05/10/2008 à 17:00
source utilisateur

voix
8

Un moyen facile de créer un compilateur est d'utiliser le bison et flex (ou similaire), construire un arbre (AST) et générer du code en C. Avec la génération du code C étant l'étape la plus importante. En générant du code C, votre langue fonctionnera automatiquement sur toutes les plates-formes qui ont un compilateur C.

Génération de code C est aussi facile que la génération HTML (utilisez simplement imprimer ou équivalent), ce qui est beaucoup plus facile que d'écrire un analyseur C ou analyseur HTML.

Créé 20/08/2008 à 10:56
source utilisateur

voix
7

Désolé, il est en espagnol, mais est la bibliographie d'un cours intitulé « Compiladores e Intérpretes » (Compilateurs et interprètes) en Argentine.

Le cours était de la théorie du langage formel compilateur construction, et ce sont les sujets dont vous avez besoin pour construire, au moins, un simple compilateur:

  • Compilateurs Design C.
    Allen I. Holub

    Prentice-Hall. 1990.

  • Compiladores. Teoría y Construcción.
    Sanchís Llorca, FJ, Galán Pascual, C. Editorial Paraninfo. 1988.

  • Construction du compilateur.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas y Automatas. Un enfoque práctico.
    Pedro Isasi Viñuela, Paloma Martínez Fernández, Daniel Borrajo Millán. Addison-Wesley Iberoamericana (Espagne). 1997.

  • L'art de la conception du compilateur. Théorie et pratique.
    Thomas Pittman, James Peters.

    Prentice Hall. 1992.

  • Compilateur orienté objet construction.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, NJ 1995

  • Compiladores. Conceptos fundamentales.
    B. Teufel, S. Schmidt, T. Teufel.

    Addison-Wesley Iberoamericana. 1995.

  • Introduction à la théorie des automates, des langues et calcul.

    John E. Hopcroft. Jeffref D. Ullman.
    Addison-Wesley. 1979.

  • Introduction aux langues officielles.
    György E. Révész.

    Mc Graw Hill. 1983.

  • Techniques de l' analyse. Un guide pratique.
    Dick Grune, Ceriel Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: Encore un autre compilateur-compilateur.
    Stephen C. Johnson
    Computing Sciences Rapport technique Nº 32, 1975. Laboratoires Bell. Murray Hill, New
    Jersey.

  • Lex: un analyseur lexical générateur.
    ME Lesk, E. Schmidt. Informatique scientifique Rapport technique Nº 39, 1975. Laboratoires Bell. Murray Hill, New Jersey.

  • et yacc lex.
    John R. Levine, Tony Mason, Doug Brown.
    O'Reilly & Associates. 1995.

  • Les éléments de la théorie du calcul.
    Harry R. Lewis, Christos H. Papadimitriou. Segunda Edición. Prentice Hall. 1998.

  • Un Algoritmo Eficiente para la Construcción del Grafo de Dependencia de contrôle.
    Salvador V. Cavadini.
    Trabajo final de Grado para obtener el Título de Ingeniero en Computación.
    Facultad de Matemática Aplicada. UCSE 2001.

Créé 25/04/2009 à 18:23
source utilisateur

voix
7

Le compilateur LCC ( wikipedia ) ( page d'accueil du projet ) de Fraser et Hanson est décrit dans leur livre « A reciblable compilateur C: Conception et mise en œuvre ». Il est tout à fait lisible et explique tout le compilateur, jusqu'à la génération de code.

Créé 16/09/2008 à 17:21
source utilisateur

voix
7

Python est livré avec un compilateur python écrit en Python. Vous pouvez voir le code source, et il comprend toutes les phases, de l'analyse syntaxique, arbre de syntaxe abstraite, le code émettant, etc. pirater.

Créé 12/08/2008 à 12:25
source utilisateur

voix
6

Pas un livre, mais un document technique et une expérience d'apprentissage énormément de plaisir si vous voulez en savoir plus sur les compilateurs (et metacompilers) ... Ce site vous guide à travers la construction d'un système de compilateur complètement autonome qui peut se compiler et d'autres langues:

Tutoriel: Metacompilers Partie 1

Tout cela est basé sur un étonnant petit document technique de 10 pages:

Val Schorre META II: un compilateur de syntaxe orientée langage d' écriture

de honnête à dieu 1964. J'ai appris comment construire des compilateurs de ce en 1970. Il y a un moment hallucinant quand vous assimilez enfin comment le compilateur peut se régénérer ....

Je sais que l'auteur du site web de mes jours de collège, mais je n'ai rien à voir avec le site.

Créé 28/08/2009 à 01:01
source utilisateur

voix
5
  1. C'est un vaste sujet. Ne sous-estimez pas ce point. Et ne sous-estimez pas mon point de ne pas sous-estimer.
  2. J'entends le dragon livre est un (le?) Point de départ, ainsi que la recherche. :) le mieux à la recherche, par la suite ce sera votre vie.
  3. Construire votre propre langage de programmation est tout à fait un bon exercice! Mais sachez qu'il ne sera jamais utilisé à des fins pratiques à la fin. Les exceptions sont rares et très espacées.
Créé 20/07/2009 à 23:44
source utilisateur

voix
5

Si vous êtes intéressé par écrit un compilateur pour un langage fonctionnel (plutôt qu'une procédure) Simon Peyton-Jones et David Lester « Mettre en œuvre les langages fonctionnels: un tutoriel » est un excellent guide.

Les bases conceptuelles de la façon dont fonctionne l'évaluation fonctionnelle est guidée par des exemples dans un langage simple et fonctionnel mais puissant appelé « Core ». De plus, chaque partie du compilateur de langage de base est expliqué avec des exemples de code à Miranda (un langage fonctionnel pur très similaire à Haskell).

Plusieurs différents types de compilateurs sont décrits, mais même si vous ne suivez que le compilateur de modèle soi-disant pour le noyau, vous aurez une excellente compréhension de ce qui fait tic-tac de la programmation fonctionnelle.

Créé 01/10/2008 à 10:30
source utilisateur

voix
5

Il y a beaucoup de bonnes réponses ici, donc je pensais que je venais ajouter un à la liste:

Je suis un livre intitulé Project Oberon il y a plus d'une décennie, qui a un texte très bien écrit sur le compilateur. Le livre se démarque vraiment dans le sens où la source et des explications est très pragmatique et facile à lire. Le texte complet (l'édition 2005) a été mis à la disposition en format pdf, vous pouvez télécharger dès maintenant. Le compilateur est discuté dans le chapitre 12:

http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf

Niklaus Wirth, Jürg Gutknecht

(Le traitement est pas aussi étendu que son livre sur les compilateurs)

J'ai lu plusieurs livres sur les compilateurs, et je peux le second livre de dragon, le temps passé sur ce livre est très utile.

Créé 19/09/2008 à 00:31
source utilisateur

voix
4

Vous pouvez utiliser BCEL par la Apache Software Foundation. Avec cet outil , vous pouvez générer du code assembleur comme, mais il est Java avec l'API BCEL. Vous pouvez apprendre comment vous pouvez générer un code de langage intermédiaire (dans ce cas , le code octet).

exemple simple

  1. Créer une classe Java avec cette fonction:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

Maintenant, exécutez BCELifier avec cette classe

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

Vous pouvez voir le résultat sur la console pour toute la classe (pour compiler le code octet MyClass.java). Le code de la fonction est la suivante:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}
Créé 14/07/2011 à 16:42
source utilisateur

voix
4

J'ai aimé le tutoriel Crenshaw aussi, car il est absolument clair qu'un compilateur est juste un autre programme qui lit une entrée et écrit une eteint.

Lis le.

Le travail si vous voulez, mais regardez une autre référence sur la façon dont les compilateurs plus grands et plus complets sont vraiment écrits.

Et lire sur Trusting confiance , pour obtenir un indice sur les choses non évidentes qui peut être fait dans ce domaine.

Créé 22/08/2008 à 16:57
source utilisateur

voix
3

Non inclus dans la liste est jusqu'à présent ce livre:

Notions de base de la conception du compilateur (Torben Mogensen) (du département. D'informatique, Université de Copenhague)

Je suis aussi intéressé à apprendre sur les compilateurs et l'intention d'entrer dans cette industrie dans les deux prochaines années. Ce livre est le livre de la théorie idéale pour commencer compilateurs d'apprentissage autant que je peux voir. Il est libre de copier et reproduire, proprement et soigneusement écrit et donne à vous en anglais simple sans code, mais présente encore la mécanique par des instructions et des diagrammes etc. Cela vaut le coup imo.

Créé 12/03/2014 à 17:05
source utilisateur

voix
3

Absent de la liste: Garbage Collection: Algorithmes pour la gestion automatique de la mémoire dynamique, par Jones et Lins.

( En supposant que vous écrivez le compilateur et le système d' exécution et que vous implémentez une langue recueilli des ordures.

Créé 27/06/2010 à 00:43
source utilisateur

voix
3

J'ai écrit un tutoriel en ligne sur la conception du compilateur, intitulé « Construisons un moteur compilateur de script, ainsi qu'un compilateur de code natif appelé Bxbasm sont chez le doc en ligne:. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

Les documents, fichiers de support et compilateur, sous forme de zip, sont à: http://geocities.com/blunt_axe_basic

Aussi: http://tech.groups.yahoo.com/group/QDepartment

Steve A.

Créé 13/01/2009 à 23:31
source utilisateur

voix
3

Dragon livre est trop compliqué. Donc ignorer comme point de départ. Il est bon et vous fait beaucoup penser une fois que vous avez déjà un point de départ, mais pour commencer, vous devriez tout simplement peut-être essayer d'écrire un évaluateur d'expression mathématique / logique en utilisant des techniques parsing RD, LL ou LR avec tout (lexing / analyse syntaxique) écrite la main dans peut-être C / Java. Ce qui est intéressant en soi et vous donne une idée des problèmes qui se posent dans un compilateur. Ensuite, vous pouvez sauter dans votre propre DSL en utilisant un langage de script (texte, puisque le traitement est généralement plus facile dans ces) et comme quelqu'un l'a dit, générer du code soit dans le langage de script lui-même ou C. Vous devriez probablement utiliser Flex / Bison / antlr etc à faire le lexing / analyse syntaxique si vous allez le faire en c / java.

Créé 01/10/2008 à 21:24
source utilisateur

voix
2

Je suis surpris qu'il n'a pas été mentionné, mais de Donald Knuth L'art de la programmation informatique était à l' origine écrit comme une sorte de tutoriel sur l' écriture du compilateur.

Bien sûr, la propension du Dr Knuth pour aller en profondeur sur des sujets a conduit au tutoriel compilateur écrit étant étendu à environ 9 volumes, dont trois seulement ont été effectivement publié. Il est un exposé assez complet sur des sujets de programmation, et couvre tout ce que vous avez besoin de savoir sur l'écriture d'un compilateur, dans les moindres détails.

Créé 21/07/2009 à 01:20
source utilisateur

voix
2

En tant que point de départ, il sera bon de créer un analyseur de descente récursive (RDP) (disons que vous voulez créer votre propre saveur de BASIC et construire un interpréteur BASIC) pour comprendre comment écrire un compilateur. J'ai trouvé les meilleures informations en C Utilisateurs Power Herbert Schild, chapitre 7. Ce chapitre fait référence à un autre livre de H. Schildt « C La référence complète » où il explique comment créer une calculatrice (un analyseur d'expression simple). J'ai trouvé deux livres sur eBay vraiment pas cher. Vous pouvez vérifier le code pour le livre si vous allez à www.osborne.com ou par chèque dans www.HerbSchildt.com J'ai trouvé le même code mais pour C # dans son dernier livre

Créé 20/08/2008 à 12:16
source utilisateur

voix
1

Si vous n'êtes pas seulement chercher des livres, mais aussi intéressés par les sites Web qui ont des articles sur le sujet, j'ai blogué sur divers aspects de la création d' un langage de programmation. La plupart des postes se trouvent dans mon blog de la catégorie « Design Language » .

En particulier, une couverture de protection de génération de code de machine Intel manuellement, générant automatiquement par machine ou bytecode, la création d'un interpréteur de pseudo-code, l'écriture d'un moteur d'exécution orienté objet, la création d'un chargeur simple, et l'écriture d'une simple marque / balayage ramasse-miettes. Tout cela d'une manière très pratique et pragmatique au lieu de vous ennuyer avec beaucoup de théorie.

Apprécierait des commentaires sur ceux-ci.

Créé 02/04/2014 à 13:39
source utilisateur

voix
1

L'approche la plus rapide est par deux livres:

Version 1990 Introduction aux techniques de compilation, un premier cours en utilisant la norme ANSI C, LEX et YACC par JP Bennett - un équilibre parfait de code par exemple, la théorie de l' analyse et conception- il contient un compilateur complet écrit en C, LEX et YACC pour une grammaire simple

Dragon Book (ancienne version) - la plupart du temps une référence détaillée pour les caractéristiques ne sont pas couverts dans le premier livre

Créé 01/04/2011 à 20:39
source utilisateur

voix
1

Chaque fois que je veux essayer une nouvelle idée de la langue, je viens d'écrire un analyseur simple, et faites-générer un langage facile à obtenir de bons compilateurs pour, comme C.

Comment pensez-vous que C ++ a été fait?

Créé 21/07/2009 à 01:42
source utilisateur

voix
1

Si vous êtes comme moi, qui n'a pas de formation informatique formelle, et est intéressé par la construction / veulent savoir comment fonctionne un compilateur:

Je suis recommande « Programmation processeurs de langage Java: Compilateurs et interprètes », un livre étonnant pour un programmeur informatique autodidacte.

De mon point de vue, comprendre les théories du langage de base, d'automatiser la machine, et la théorie des ensembles est pas un gros problème. Le problème est de savoir comment transformer ces choses en code. Le livre ci-dessus vous indique comment écrire un analyseur syntaxique, le contexte d'analyse et de production de code. Si vous ne pouvez pas comprendre ce livre, je dois dire, renoncer à la construction d'un compilateur. Le livre est le meilleur livre de programmation que j'ai jamais lu.

Il y a un autre livre, aussi bien, la conception du compilateur en C . Il y a beaucoup de code, et il vous dit tout sur la façon de construire un outil de compilateur et analyseurs lexicaux.

Construire un compilateur est une pratique de programmation amusante et peut vous apprendre des tas de compétences en programmation.

Ne pas acheter le livre du Dragon . Il était un gaspillage de temps et d' argent et pas pour un praticien.

Créé 05/02/2009 à 03:55
source utilisateur

voix
0
  • Commencez par vous que vous pouvez répondre à la plupart des questions tagués C ++ ici débordement de la pile.
  • Après cela, vous devez vous assurer que vous comprenez comment les autres compilateurs travaillent et comprennent [parties] de leur code source.
  • Vous remarquerez que vous avez besoin assembleur et allez commencer assembleur d'apprentissage jusqu'à ce que vous pouvez répondre à de nombreuses questions avec cette étiquette.
  • Si vous êtes loin, vous constaterez que plusieurs années se sont écoulées et se rendre compte de la taille d'un tel projet est et peut-être sourire à votre propre question de l'époque (si cette page existe encore à ce moment-là) ...
Créé 21/07/2009 à 00:01
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more