Μαθαίνοντας να γράψετε ένα compiler

ψήφοι
699

Προτεινόμενα γλώσσες : C / C ++, Java και Ruby.

Ψάχνω για ορισμένα χρήσιμα βιβλία / tutorials για το πώς να γράψετε τη δική σας compiler μόνο για εκπαιδευτικούς σκοπούς. Είμαι πιο εξοικειωμένοι με την C / C ++, Java και Ruby, οπότε προτιμώ πόρων που αφορούν ένα από αυτά τα τρία, αλλά κάθε καλή πηγή είναι αποδεκτή.

Δημοσιεύθηκε 04/08/2008 στις 23:46
πηγή χρήστη
Σε άλλες γλώσσες...                            


40 απαντήσεις

ψήφοι
1k

Μεγάλη Λίστα των πόρων:

Θρύλος:

  • ¶ Σύνδεσμος σε αρχείο PDF
  • $ Σύνδεσμος για ένα τυπωμένο βιβλίο
Απαντήθηκε 04/08/2008 στις 23:52
πηγή χρήστη

ψήφοι
69

Αυτή είναι μια πολύ αόριστη ερώτηση, νομίζω? μόνο και μόνο επειδή του το βάθος του θέματος που εμπλέκονται. Ένας μεταγλωττιστής μπορεί να αναλυθεί σε δύο ξεχωριστά μέρη, ωστόσο? ένα top-μισό και ένα κάτω-όνη. Το top-μισό παίρνει συνήθως τη γλώσσα-πηγή και το μετατρέπει σε μια ενδιάμεση αναπαράσταση, και το κάτω μισό φροντίζει για τη συγκεκριμένη πλατφόρμα παραγωγή κώδικα.

Παρ 'όλα αυτά, μια ιδέα για έναν εύκολο τρόπο να προσεγγίσουμε αυτό το θέμα (το ένα που χρησιμοποιείται σε μεταγλωττιστές τάξη μου, τουλάχιστον) είναι να οικοδομήσουμε τον compiler σε δύο κομμάτια που περιγράφονται παραπάνω. Συγκεκριμένα, θα πάρετε μια καλή ιδέα για την όλη διαδικασία με ακριβώς την κατασκευή του πρώτου μισού.

Απλά κάνει το επάνω μισό σας επιτρέπει να πάρετε την εμπειρία της γραφής το λεξιλογικό αναλυτή και το πρόγραμμα ανάλυσης και να πάει να παράγει κάποια «κώδικα» (που ενδιάμεσο εκπροσώπηση ανέφερα). Έτσι θα πάρει το πρόγραμμα πηγή σας και να το μετατρέψει σε μια άλλη παράσταση και να κάνετε κάποια βελτιστοποίηση (αν θέλετε), που είναι η καρδιά ενός μεταγλωττιστή. Το κάτω μισό θα λάβει στη συνέχεια ότι η ενδιάμεση αναπαράσταση και τη δημιουργία των bytes που απαιτούνται για την εκτέλεση του προγράμματος σε μια συγκεκριμένη αρχιτεκτονική. Για παράδειγμα, η το κάτω μισό θα λάβουν ενδιάμεση αναπαράσταση σας και να δημιουργήσετε ένα εκτελέσιμο ΡΕ.

Μερικά βιβλία για το θέμα αυτό που βρήκα ιδιαίτερα χρήσιμο ήταν Μεταγλωττιστές Αρχές και Τεχνικές (ή ο Δράκος βιβλίο, λόγω της χαριτωμένο δράκο στο εξώφυλλο). Είναι πήρε κάποια μεγάλη θεωρία και σίγουρα καλύπτει Context-Free Γραμματικές σε ένα πραγματικά προσιτό τρόπο. Επίσης, για την κατασκευή του λεξιλογικό αναλυτή και αναλυτή, θα πρέπει πιθανώς να χρησιμοποιήσετε το lex και yacc * nix εργαλεία. Και αρκετά uninterestingly, το βιβλίο με τίτλο « lex και yacc » πήρε όταν ο Δράκος βιβλίο που σταμάτησε για αυτό το μέρος.

Απαντήθηκε 21/07/2009 στις 00:01
πηγή χρήστη

ψήφοι
54

Νομίζω ότι Σύγχρονη Εφαρμογή Compiler στην ML είναι το καλύτερο κείμενο εισαγωγικό compiler γραφής. Υπάρχει μια έκδοση Java και μια έκδοση C πάρα πολύ, καθένα από τα οποία μπορεί να είναι πιο προσιτά δοθεί γλώσσες σας υπόβαθρο. Το βιβλίο ενσωματώνει πολλά χρήσιμα βασικό υλικό (σάρωση και την ανάλυση, σημασιολογική ανάλυση, εγγραφές δραστηριοποίησης, η επιλογή χρήσης, RISC και x86 μητρική παραγωγή κώδικα) και διάφορα «προχωρημένη» θέματα (σύνταξη OO και λειτουργική γλώσσες, πολυμορφισμός, συλλογή σκουπιδιών, βελτιστοποίηση και μόνο στατική μορφή εκχώρησης) σε σχετικά μικρό χώρο (~ 500 σελίδες).

Προτιμώ Σύγχρονη Εφαρμογή Compiler για το βιβλίο του Δράκου λόγω Σύγχρονη Compiler έρευνες εφαρμογή λιγότερο τομέα - αντί να έχει πραγματικά σταθερή κάλυψη όλων των θεμάτων που θα πρέπει να γράψετε ένα σοβαρό, αξιοπρεπές compiler. Αφού εργαστούν μέσα από αυτό το βιβλίο θα είστε έτοιμοι να αντιμετωπίσουν ερευνητικές εργασίες άμεσα για περισσότερο βάθος, αν το χρειάζεστε.

Οφείλω να ομολογήσω έχω ένα σοβαρό μαλακό σημείο για Niklaus Wirth του Compiler κατασκευής. Είναι διαθέσιμη στο διαδίκτυο σε μορφή PDF. Θεωρώ αισθητική προγραμματισμού Wirth είναι απλά όμορφο, όμως μερικοί άνθρωποι βρίσκουν το ύφος του είναι πολύ ελάχιστες (π.χ. Wirth ευνοεί αναδρομική αναλυτές κάθοδο, αλλά τα περισσότερα μαθήματα CS επικεντρωθεί σε εργαλεία γεννήτρια parser?. Γλώσσας σχέδια Wirth είναι αρκετά συντηρητική) Compiler κατασκευής είναι μια πολύ σύντομη απόσταξης των βασικών ιδεών Wirth, οπότε αν σας αρέσει το στυλ ή όχι ή όχι του, συστήνω ιδιαίτερα την ανάγνωση αυτού του βιβλίου.

Απαντήθηκε 10/08/2008 στις 08:54
πηγή χρήστη

ψήφοι
45

Συμφωνώ με την αναφορά Δράκος βιβλίο? Του ΙΜΟ, είναι ο οριστικός οδηγός για μεταγλωττιστής κατασκευής. Ετοιμαστείτε για κάποια θεωρία hardcore, όμως.

Αν θέλετε ένα βιβλίο που είναι ελαφρύτερο στη θεωρία, το παιχνίδι Scripting Mastery θα μπορούσε να είναι μια καλύτερη βιβλίο για σας. Αν είστε ένα συνολικό newbie στην θεωρία compiler, παρέχει μια πιο ήπια εισαγωγή. Δεν καλύπτει περισσότερες πρακτικές μεθόδους ανάλυσης (επιλογή μη πρόβλεψης αναδρομική κατάβαση χωρίς συζήτηση LL ή LR ανάλυσης), και από όσο θυμάμαι, δεν έχει καν συζητήσει οποιοδήποτε είδος της θεωρίας βελτιστοποίησης. Πλέον, αντί της σύνταξης σε κώδικα μηχανής, που συγκεντρώνει σε ένα bytecode που υποτίθεται ότι τρέχει σε ένα VM που επίσης γράφουν.

Είναι ακόμα ένα αξιοπρεπές ανάγνωσης, ειδικά αν μπορείτε να το πάρει για φθηνή για την Amazon. Εάν θέλετε μόνο μια εύκολη εισαγωγή στο compilers, το παιχνίδι Scripting Κυριαρχία δεν είναι ένας κακός τρόπος να πάει. Αν θέλετε να πάτε hardcore μπροστά, τότε θα πρέπει να συμβιβαστεί με τίποτα λιγότερο από το Δράκο βιβλίο.

Απαντήθηκε 05/08/2008 στις 00:08
πηγή χρήστη

ψήφοι
28

«Ας οικοδομήσουμε μια Compiler» είναι φοβερό, αλλά είναι λίγο ξεπερασμένη. (Δεν λέω ότι κάνει έστω και λίγο λιγότερο έγκυρο.)

Ή δείτε SLANG . Αυτό είναι παρόμοιο με το «Ας οικοδομήσουμε μια Compiler», αλλά είναι πολύ καλύτερη πηγή ειδικά για τους αρχάριους. Αυτό έρχεται με ένα φροντιστήριο pdf που παίρνει μια προσέγγιση 7 βήμα σε σας διδάξει ένα compiler. Προσθήκη του συνδέσμου Quora, δεδομένου ότι έχουν τις συνδέσεις με όλα τα διάφορα λιμάνια αργκό, σε C ++, Java και JS, και διερμηνείς σε python και java, αρχικά αναφέρεται με C # και την πλατφόρμα .NET.

Απαντήθηκε 04/08/2008 στις 23:56
πηγή χρήστη

ψήφοι
24

Αν ψάχνετε για να χρησιμοποιήσετε ισχυρά, υψηλότερο επίπεδο εργαλείων αντί για την κατασκευή πάντα τον εαυτό σου, να περάσει από τα έργα και αναγνώσεις για αυτό το μάθημα είναι μια πολύ καλή επιλογή. Είναι μια πορεία γλώσσες από τον συγγραφέα του ANTLR κινητήρα parser Java. Μπορείτε να πάρετε το βιβλίο για το μάθημα σε μορφή PDF από τις Ρεαλιστικό Προγραμματιστές .

Η πορεία πηγαίνει πέρα από την τυπική πράγματα compiler compiler που βλέπετε αλλού: την ανάλυση, τα είδη και ο έλεγχος του τύπου, πολυμορφισμός, πίνακες συμβόλων, και παραγωγή κώδικα. Λίγο πολύ το μόνο πράγμα που δεν καλύπτονται είναι βελτιστοποιήσεις. Το τελικό σχέδιο είναι ένα πρόγραμμα που καταρτίζει ένα υποσύνολο της C . Επειδή χρησιμοποιείτε εργαλεία όπως ANTLR και LLVM, είναι εφικτό να γράψω ολόκληρο το μεταγλωττιστή σε μια μέρα (έχω μια ύπαρξη απόδειξη γι 'αυτό, αν και εννοώ ~ 24 ώρες). Είναι βαρύ για τις πρακτικές της μηχανικής με τη χρήση σύγχρονων εργαλείων, λίγο ελαφρύτερο στη θεωρία.

LLVM, από τον τρόπο, είναι απλά φανταστικό. Πολλές καταστάσεις που μπορεί να συνήθως συγκεντρώνουν κάτω από τη συναρμολόγηση, θα ήθελα να είναι σε πολύ καλύτερη κατάσταση κατάρτιση για ενδιάμεση αναπαράσταση LLVM του αντ 'αυτού. Είναι υψηλότερο επίπεδο, διαγώνια πλατφόρμα, και LLVM είναι αρκετά καλή στη δημιουργία βελτιστοποιημένες συναρμολόγησης από αυτό.

Απαντήθηκε 05/08/2008 στις 00:13
πηγή χρήστη

ψήφοι
20

Αν έχετε λίγο χρόνο, ήθελα να συστήσω «Compiler Κατασκευές» Niklaus Wirth του (Addison-Wesley. 1996) , ένα μικρό βιβλιαράκι που μπορείτε να διαβάσετε σε μια μέρα, αλλά εξηγεί τα βασικά (συμπεριλαμβανομένου του πώς να εφαρμόσουν lexers, αναδρομικές parsers κάθοδο, και το δικό σας stack-based virtual machines). Μετά από αυτό, αν θέλετε μια βαθιά κατάδυση, δεν υπάρχει κανένας τρόπος γύρω από το βιβλίο του Δράκου και άλλα σχολιαστές προτείνουν.

Απαντήθηκε 29/08/2010 στις 00:14
πηγή χρήστη

ψήφοι
17

Μπορεί να θέλετε να εξετάσει Lex / Yacc (ή Flex / Bison, ό, τι θέλετε να τους αποκαλούν). Flex είναι ένα λεξιλογικό αναλυτής, ο οποίος θα αναλύσει και να εντοπίσει τις σημασιολογικές συστατικά ( «μάρκες») της γλώσσας σας, και Bison θα χρησιμοποιηθούν για να καθορίσουν τι συμβαίνει όταν κάθε δείγμα αναλύεται. Αυτό θα μπορούσε να είναι, αλλά σίγουρα δεν περιορίζονται σε, εκτύπωση κώδικα C, για ένα compiler που θα συγκεντρώνει σε C, ή δυναμικά την εκτέλεση των οδηγιών.

Αυτό το FAQ θα σας βοηθήσει, και αυτό το σεμινάριο φαίνεται αρκετά χρήσιμο.

Απαντήθηκε 20/07/2009 στις 23:47
πηγή χρήστη

ψήφοι
16

Σε γενικές γραμμές, δεν υπάρχει πέντε λεπτά tutorial για μεταγλωττιστές, επειδή είναι ένα πολύπλοκο θέμα και γράφει ένα compiler μπορεί να πάρει μήνες. Θα πρέπει να κάνετε τη δική σας έρευνα.

Python και Ruby συνήθως ερμηνεύονται. Ίσως θέλετε να ξεκινήσετε με ένα διερμηνέα, καθώς και. Είναι γενικά ευκολότερο.

Το πρώτο βήμα είναι να γράψετε μια επίσημη περιγραφή γλώσσα, τη γραμματική της γλώσσας προγραμματισμού σας. Στη συνέχεια θα πρέπει να μετατρέψει τον πηγαίο κώδικα που θέλετε να μεταγλωττίσετε ή να ερμηνεύσει σύμφωνα με τη γραμματική σε ένα αφηρημένο συντακτικό δέντρο, μια εσωτερική μορφή του πηγαίου κώδικα που ο υπολογιστής κατανοεί και μπορεί να λειτουργήσει με. Αυτό το βήμα είναι συνήθως ονομάζεται ανάλυση και το λογισμικό που αναλύει τον πηγαίο κώδικα ονομάζεται αναλυτή. Συχνά, το πρόγραμμα ανάλυσης παράγεται από μια γεννήτρια parser που μετατρέπουν επίσημη γραμματική σε oder πηγαίου κώδικα μηχανής. Για ένα καλό, μη-μαθηματική εξήγηση της ανάλυσης συστήνω Parsing Τεχνικές - Ένας πρακτικός οδηγός. Wikipedia έχει μια σύγκριση των γεννητριών αναλυτή από την οποία μπορείτε να επιλέξετε αυτό το ένα που είναι κατάλληλο για εσάς. Ανάλογα με τη γεννήτρια parser που επιλέξατε, θα βρείτε tutorials στο διαδίκτυο και πολύ δημοφιλής γεννήτριες αναλυτή (όπως το GNU bison) υπάρχουν επίσης βιβλία.

Γράφοντας ένα πρόγραμμα ανάλυσης για τη γλώσσα σας μπορεί να είναι πραγματικά δύσκολο, αλλά αυτό εξαρτάται από τη γραμματική σας. Γι 'αυτό προτείνω να κρατήσει τη γραμματική σας απλό (σε αντίθεση με C ++)? ένα καλό παράδειγμα για αυτό είναι LISP.

Στο δεύτερο στάδιο η αφηρημένο δέντρο συντακτικό μετασχηματίζεται από μια δομή δέντρου σε ένα γραμμικό ενδιάμεσο αναπαράσταση. Ως ένα καλό παράδειγμα για το bytecode αυτού του Λούα είναι συχνά αναφέρεται. Όμως, η ενδιάμεση αναπαράσταση πραγματικά εξαρτάται από τη γλώσσα σας.

Αν είστε οικοδόμηση ενός διερμηνέα, θα πρέπει απλά να ερμηνεύσει την ενδιάμεση αναπαράσταση. Θα μπορούσατε επίσης να το just-in-time-κατάρτιση. Θα ήθελα να συστήσω LLVM και libjit για just-in-time-κατάρτιση. Για να κάνετε μπορεί να χρησιμοποιηθεί η γλώσσα που θα πρέπει επίσης να περιλαμβάνει ορισμένες λειτουργίες εισόδου και εξόδου και ίσως μια μικρή πρότυπη βιβλιοθήκη.

Εάν πρόκειται να καταρτίσει τη γλώσσα, θα είναι πιο περίπλοκη. Θα πρέπει να γράψετε συστήματα υποστήριξης για διαφορετικές αρχιτεκτονικές υπολογιστών και τη δημιουργία κώδικα μηχανής από την ενδιάμεση αντιπροσώπευση στις εν λόγω backend. Θα ήθελα να συστήσω LLVM για το έργο αυτό.

Υπάρχουν μερικά βιβλία για το θέμα αυτό, αλλά μπορώ να συστήσω κανένα από αυτά για γενική χρήση. Οι περισσότεροι από αυτούς είναι πολύ ακαδημαϊκό ή πολύ πρακτικό. Δεν υπάρχει «Διδάξτε τον εαυτό σας μεταγλωττιστής γραπτώς σε 21 ημέρες» και, συνεπώς, θα πρέπει να αγοράσετε πολλά βιβλία για να πάρετε μια καλή κατανόηση του όλου αυτού του θέματος. Εάν κάνετε αναζήτηση στο διαδίκτυο, θα συναντήσετε μερικές κάποια online βιβλία και τις σημειώσεις διάλεξης. Ίσως υπάρχει μια πανεπιστημιακή βιβλιοθήκη κοντά σας, όπου μπορείτε να δανειστείτε βιβλία για μεταγλωττιστές.

Θα ήθελα να συστήσω επίσης ένα καλό γνωστικό υπόβαθρο στη θεωρητική επιστήμη των υπολογιστών και θεωρία γραφημάτων, αν πρόκειται να κάνει το έργο σας σοβαρά. Ένα πτυχίο στην επιστήμη των υπολογιστών θα είναι επίσης χρήσιμη.

Απαντήθηκε 21/07/2009 στις 11:37
πηγή χρήστη

ψήφοι
14

Ρίξτε μια ματιά στο παρακάτω βιβλίο. Ο συγγραφέας είναι ο δημιουργός της ANTLR .

Γλώσσα Patterns Εφαρμογή: Δημιουργήστε το δικό σας domain-Ειδικοί και Γενικοί Γλώσσες Προγραμματισμού .

alt κείμενο

Απαντήθηκε 18/05/2010 στις 00:38
πηγή χρήστη

ψήφοι
11

Ένα βιβλίο που δεν έχουν ακόμη προταθεί, αλλά πολύ σημαντικό είναι «Οι συνδετήρες και φορτωτές» από τον John Levine. Εάν δεν χρησιμοποιείτε μια εξωτερική συναρμολόγησης, θα χρειαστείτε έναν τρόπο για έξοδο ένα αρχείο αντικείμενο που μπορεί να συνδεθεί στο τελικό πρόγραμμα σας. Ακόμα κι αν χρησιμοποιείτε μια εξωτερική συναρμολόγησης, θα πρέπει πιθανώς να κατανοήσουν τις μετεγκαταστάσεις και πώς η όλη διαδικασία φόρτωσης του προγράμματος εργάζεται για να κάνει ένα εργαλείο εργασίας. Το βιβλίο αυτό συγκεντρώνει ένα μεγάλο μέρος της τυχαίας γνώση γύρω από αυτή τη διαδικασία για τα διάφορα συστήματα, συμπεριλαμβανομένων των Win32 και Linux.

Απαντήθηκε 18/08/2008 στις 21:18
πηγή χρήστη

ψήφοι
10

Βρήκα το βιβλίο του Δράκου πάρα πολύ δύσκολο να διαβαστεί με πάρα πολύ έμφαση στην θεωρία γλώσσα που δεν είναι πραγματικά απαιτείται για να γράψει ένα compiler στην πράξη.

Θα ήθελα να προσθέσω την Oberon βιβλίο που περιέχει την πλήρη πηγή μια εκπληκτικά γρήγορη και απλή Oberon compiler έργου Oberon .

alt κείμενο

Απαντήθηκε 09/08/2010 στις 19:33
πηγή χρήστη

ψήφοι
10

Εάν είστε πρόθυμοι να χρησιμοποιήσουν LLVM, ελέγξτε αυτό έξω: http://llvm.org/docs/tutorial/ . Σας διδάσκει πώς να γράψετε ένα compiler από την αρχή χρησιμοποιώντας πλαίσιο LLVM της, και δεν αναλαμβάνει έχετε καμία γνώση για το θέμα.

Το σεμινάριο Συνιστούμε να γράψετε το δικό σας πρόγραμμα ανάλυσης και λεκτικού κλπ, αλλά σας συμβουλεύω να εξετάσει βίσονες και flex μόλις πάρετε την ιδέα. Κάνουν τη ζωή τόσο πολύ ευκολότερη.

Απαντήθηκε 20/08/2008 στις 11:01
πηγή χρήστη

ψήφοι
10

Ο Δράκος βιβλίο είναι σίγουρα το «κτίριο μεταγλωττιστές» το βιβλίο, αλλά αν η γλώσσα σας δεν είναι τόσο περίπλοκο όπως η σημερινή γενιά των γλωσσών, μπορεί να θέλετε να εξετάσει το σχέδιο Διερμηνέων από μοτίβα σχεδίασης .

Το παράδειγμα στο βιβλίο σχεδιάζει μια κανονική έκφραση, όπως η γλώσσα και είναι καλά μελετημένο, αλλά όπως λένε στο βιβλίο, είναι καλό για τη σκέψη μέσω της διαδικασίας, αλλά είναι αποτελεσματικό στην πραγματικότητα μόνο στις μικρές γλώσσες. Ωστόσο, είναι πολύ πιο γρήγορα για να γράψετε ένα διερμηνέα για μια μικρή γλώσσα με αυτό το μοτίβο από το να μάθουν για όλα τα διαφορετικά είδη των parsers, yacc και lex, κ.λπ. ...

Απαντήθηκε 05/08/2008 στις 17:16
πηγή χρήστη

ψήφοι
9

Θυμάμαι αυτή την ερώτηση περίπου επτά χρόνια πριν, όταν ήμουν αρκετά νέος στο προγραμματισμού. Ήμουν πολύ προσεκτικός όταν ρώτησα και έκπληξη δεν είχα πάρει τόσο πολύ την κριτική και παίρνετε εδώ. Ωστόσο Έκαναν σημείο μου προς την κατεύθυνση του « Δράκου Book », το οποίο είναι κατά τη γνώμη μου, ένα πραγματικά σπουδαίο βιβλίο που εξηγεί όλα όσα χρειάζεται να ξέρετε για να γράψει ένα compiler (μπορείτε, φυσικά, θα πρέπει να κυριαρχήσει μια γλώσσα ή δύο. Το πιο γλώσσες ξέρεις, τόσο το καλύτερο.).

Και ναι, πολλοί άνθρωποι λένε διαβάζοντας το βιβλίο είναι τρελό και δεν θα μάθει τίποτα από αυτό, αλλά διαφωνώ πλήρως με αυτό.

Πολλοί άνθρωποι λένε ότι το γράψιμο μεταγλωττιστές είναι ανόητο και άσκοπο. Λοιπόν, υπάρχουν πολλοί λόγοι για τους οποίους ανάπτυξη compiler είναι χρήσιμες: - Επειδή είναι διασκεδαστικό. - Είναι εκπαιδευτικών, κατά την εκμάθηση πώς να γράψει μεταγλωττιστές θα μάθετε πολλά για την επιστήμη των υπολογιστών και άλλες τεχνικές που είναι χρήσιμες όταν γράφετε άλλες εφαρμογές. - Αν κανείς δεν έγραψε compilers οι υπάρχουσες γλώσσες δεν θα πάρει καθόλου καλύτερα.

Δεν έγραψα το δικό μου compiler αμέσως, αλλά μετά ζητώντας ήξερα από πού να αρχίσω. Και τώρα, αφού έμαθε πολλές διαφορετικές γλώσσες και την ανάγνωση του Δράκου βιβλίο, το γράψιμο δεν είναι τόσο μεγάλο πρόβλημα. (Είμαι, επίσης, τις σπουδές μηχανικού υπολογιστή atm, αλλά τα περισσότερα από αυτά που ξέρω για τον προγραμματισμό είναι αυτοδίδακτος.)

Εν κατακλείδι: - Ο Δράκος βιβλίο είναι ένα μεγάλο «φροντιστήριο». Αλλά να περάσουν λίγο χρόνο εκμάθηση μιας γλώσσας ή δύο πριν επιχειρήσετε να γράψετε ένα compiler. Μην περιμένετε να είναι ένας γκουρού compiler μέσα στην επόμενη δεκαετία ή έτσι όμως.

Το βιβλίο είναι επίσης καλή, αν θέλετε να μάθετε πώς να γράφουν προγράμματα ανάλυσης / διερμηνείς.

Απαντήθηκε 06/08/2009 στις 23:37
πηγή χρήστη

ψήφοι
9

Ψάχνω στην ίδια έννοια, και βρήκα αυτό το πολλά υποσχόμενο άρθρο του Joel Pobar,

Δημιουργήστε ένα Compiler Γλώσσας για του .NET Framework

συζητά μια ιδέα υψηλό επίπεδο της μεταγλώττισης και τα έσοδα να επινοήσει τη δική langauge του για το .NET Framework. Παρόλο που αποσκοπούν του στο .NET Framework, πολλές από τις έννοιες θα πρέπει να είναι σε θέση να αναπαραχθούν. Το άρθρο καλύπτει:

  1. ορισμός Langauge
  2. Ερευνητής
  3. Parser (η im λίγο ενδιαφέρονται κυρίως)
  4. Στόχευση του .NET Framework Η
  5. Γεννήτρια κώδικα

υπάρχουν και άλλα θέματα, αλλά μπορείτε να πάρετε το ακριβώς.

Της στόχο για τους ανθρώπους ξεκινάμε, γραμμένο σε C # (όχι αρκετά Java)

HTH

οστά

Απαντήθηκε 31/12/2008 στις 00:01
πηγή χρήστη

ψήφοι
9

«... Ας οικοδομήσουμε μια Compiler ...»

Είχα δεύτερο http://compilers.iecc.com/crenshaw/ από @sasb . Ξεχάστε την αγορά περισσότερα βιβλία για την ώρα.

Γιατί; Εργαλεία & γλώσσα.

Η γλώσσα που απαιτείται είναι Pascal και αν θυμάμαι σωστά βασίζεται σε Turbo-Pascal. Είναι ακριβώς έτσι συμβαίνει αν πάτε να http://www.freepascal.org/ και να κατεβάσετε το Pascal compiler όλα τα παραδείγματα που εργάζονται κατ 'ευθείαν από τη σελίδα ~ http://www.freepascal.org/download.var Το πράγμα Περιποίηση για το Ελεύθερο Pascal είναι ότι μπορείτε να το χρησιμοποιήσετε σχεδόν οποιοδήποτε επεξεργαστή ή OS μπορείτε να φροντίζετε.

Μόλις έχετε μάθει τα μαθήματα τότε δοκιμάστε το πιο προηγμένο « Δράκος βιβλίο » ~ http://en.wikipedia.org/wiki/Dragon_book

Απαντήθηκε 20/08/2008 στις 12:28
πηγή χρήστη

ψήφοι
8

Από την comp.compilers Συχνές ερωτήσεις :

"Προγραμματισμός ενός προσωπικού υπολογιστή" από τον Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5

Το βιβλίο αυτό, δυστυχώς, με τίτλο εξηγεί ο σχεδιασμός και η δημιουργία ενός περιβάλλοντος προγραμματισμού ενός χρήστη για micros, χρησιμοποιώντας μια Pascal-like γλώσσα που ονομάζεται Edison. Ο συγγραφέας παρουσιάζει όλο τον πηγαίο κώδικα και εξηγήσεις για την υλοποίηση βήμα-προς-βήμα ενός μεταγλωττιστή Edison και απλή υποστήριξη του λειτουργικού συστήματος, όλα γραμμένα από μόνη της (εκτός από ένα μικρό πυρήνα υποστήριξης γραμμένο σε συμβολική συναρμολόγησης για PDP 11/23 Edison? Η πλήρης πηγή μπορεί επίσης να παραγγελθεί για το PC της IBM).

Τα πιο ενδιαφέροντα πράγματα σχετικά με αυτό το βιβλίο είναι: 1) την ικανότητά του να δείξει πώς να δημιουργήσετε ένα πλήρες, αυτοτελές, αυτο-διατήρηση, χρήσιμα compiler και το λειτουργικό σύστημα, και 2) η ενδιαφέρουσα συζήτηση για το σχεδιασμό και τις προδιαγραφές προβλήματα γλώσσας και το εμπόριο offs στο κεφάλαιο 2.

"Brinch Hansen σε Pascal Μεταγλωττιστές" του Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4

Ένα άλλο φως-on-θεωρία βαρύ-για-πραγματολογία Ακολουθήστε τα παρακάτω-πώς-να-code-το βιβλίο. Ο συγγραφέας παρουσιάζει τη σχεδίαση, υλοποίηση και πλήρη πηγαίο κώδικα για ένα compiler και π-κώδικα διερμηνέας για Pascal- (Pascal «μείον»), μια Pascal υποσύνολο με boolean και ακέραια τύπους (αλλά όχι χαρακτήρες, ρεάλ, πιο μικρότερο εύρος ή απαριθμούνται τα είδη) , σταθερό και μεταβλητό τους ορισμούς και τη σειρά και να καταγράφει τους τύπους (αλλά όχι συσκευασμένα, παραλλαγή, που, δείκτης, ανώνυμος, μετονομαστεί ή τύπους αρχείων), εκφράσεις, δηλώσεις ανάθεσης, ένθετα ορισμοί διαδικασία με την αξία και μεταβλητών παραμέτρων, αν δηλώσεις, ενώ δηλώσεις, και να αρχίσει στο τέλος του μπλοκ (αλλά όχι ορισμούς λειτουργία, διαδικαστικές παραμέτρους, goto δηλώσεις και ετικέτες, δηλώσεις περίπτωση, δηλώσεις επανάληψη, για τις δηλώσεις και δηλώσεις).

Ο μεταγλωττιστής και διερμηνέας είναι γραμμένο σε Pascal * (Pascal «αστέρι»), μια Pascal υποσύνολο επεκταθεί με κάποια χαρακτηριστικά Edison-στυλ για τη δημιουργία συστημάτων ανάπτυξης λογισμικού. Μια Pascal * compiler για το IBM PC πωλείται από τον συγγραφέα, αλλά είναι εύκολο να το λιμάνι Pascal- compiler του βιβλίου με οποιοδήποτε πρόσφορο Pascal πλατφόρμα.

Το βιβλίο αυτό κάνει το σχεδιασμό και την υλοποίηση ενός μεταγλωττιστή φαίνεται εύκολο. Μου αρέσει ιδιαίτερα ο τρόπος με τον συγγραφέα ασχολείται με την ποιότητα, την αξιοπιστία και τη δοκιμή. Ο compiler και διερμηνέας μπορεί εύκολα να χρησιμοποιηθεί ως βάση για μια πιο περίπλοκη γλώσσα ή compiler έργο, ειδικά αν πιεστεί για να πάρει γρήγορα κάτι οργανωθεί και να λειτουργήσει.

Απαντήθηκε 26/06/2010 στις 21:17
πηγή χρήστη

ψήφοι
8

Θα πρέπει να ελέγξετε έξω «Δαρείος Μπέικον ichbins », το οποίο είναι ένα μεταγλωττιστή για μια μικρή Lisp διάλεκτο, με στόχο C, σε μόλις πάνω από 6 σελίδες κώδικα. Το πλεονέκτημα που έχει πάνω από τα περισσότερα compilers παιχνίδι είναι ότι η γλώσσα είναι αρκετά πλήρης ώστε ο compiler είναι γραμμένο σε αυτό. (Το συμπιεσμένο αρχείο περιλαμβάνει επίσης έναν διερμηνέα για την εκκίνηση το πράγμα.)

Υπάρχουν κι άλλα πράγματα για το τι βρήκα χρήσιμο στην εκμάθηση να γράψει ένα compiler στο μου Ur-Σχέδιο ιστοσελίδας.

Απαντήθηκε 05/10/2008 στις 17:00
πηγή χρήστη

ψήφοι
8

Ένας εύκολος τρόπος για να δημιουργήσετε ένα μεταγλωττιστή είναι να χρησιμοποιήσετε βίσονες και flex (ή παρόμοια), κατασκευή ενός δένδρου (AST) και θα δημιουργήσει κώδικα σε C. Με τη δημιουργία του κώδικα C είναι το πιο σημαντικό βήμα. Με τη δημιουργία του κώδικα C, η γλώσσα σας θα λειτουργήσει αυτόματα σε όλες τις πλατφόρμες που έχουν compiler C.

Τη δημιουργία του κώδικα C είναι τόσο εύκολη όσο και τη δημιουργία HTML (απλά χρησιμοποιήστε εκτύπωσης, ή ισοδύναμο), η οποία με τη σειρά της είναι πολύ πιο εύκολο από ό, τι γράφει ένα πρόγραμμα ανάλυσης C ή HTML parser.

Απαντήθηκε 20/08/2008 στις 10:56
πηγή χρήστη

ψήφοι
7

Δυστυχώς, είναι στα ισπανικά, αλλά αυτή είναι η βιβλιογραφία του μαθήματος που ονομάζεται «Compiladores e ερμηνεύσει» (Μεταφραστές και Διερμηνείς) στην Αργεντινή.

Η πορεία ήταν από την επίσημη θεωρία γλώσσα μεταγλωττιστής κατασκευή, και αυτά είναι τα θέματα που θα πρέπει να οικοδομήσουμε, τουλάχιστον, ένα απλό compiler:

  • Μεταγλωττιστές Design στο C.
    Allen Ι Holub

    Prentice-Hall. 1990.

  • Compiladores. Teoría y construcción.
    Sanchis Llorca, FJ, Galán Pascual, C. Editorial Paraninfo. 1988.

  • Compiler κατασκευής.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas y Autómatas. Un enfoque Practico.
    Pedro Isasi Viñuela, Paloma Martínez Fernández, Daniel Μποράχιο Millán. Addison-Wesley Iberoamericana (España). 1997.

  • Η τέχνη του σχεδιασμού compiler. Θεωρία και πράξη.
    Thomas Pittman, James Peters.

    Prentice-Hall. 1992.

  • Αντικειμενοστρεφής Compiler κατασκευής.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, NJ 1995

  • Compiladores. Conceptos Fundamentales.
    B. Teufel, S. Schmidt, Τ Teufel.

    Addison-Wesley Iberoamericana. 1995.

  • Εισαγωγή στη Θεωρία Αυτομάτων, Γλώσσες, και Υπολογισμού.

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

  • Εισαγωγή στις τυπικές γλώσσες.
    György Ε Révész.

    Mc Graw Hill. 1983.

  • Parsing τεχνικές. Ένας πρακτικός οδηγός.
    Dick Grune, Ceriel Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: ένα ακόμη Compiler-Compiler.
    Stephen C. Johnson
    Computing Science Τεχνική έκθεση αριθ 32, 1975. Bell Laboratories. Murray Hill, New
    Jersey.

  • Lex: ένα λεξικογραφικό αναλυτή γεννήτρια.
    ME Lesk, E. Schmidt. Πληροφορική Τεχνική Έκθεση Επιστήμης Nº 39, 1975. Bell Laboratories. Murray Hill, New Jersey.

  • lex & yacc.
    John R. Levine, Τόνι Mason, Doug Brown.
    O'Reilly & Associates. 1995.

  • Στοιχεία της θεωρίας υπολογισμού.
    Harry R. Lewis, Χρήστος Παπαδημητρίου. Segunda Edición. Prentice Hall. 1998.

  • Un Algoritmo Eficiente para la construcción del Grafo de Dependencia de Ελέγχου.
    Salvador V. Cavadini.
    Trabajo Τελική de Grado παρ Obtener el Título de Ingeniero en Computacion.
    Facultad de Matemática Aplicada. UCSE 2001.

Απαντήθηκε 25/04/2009 στις 18:23
πηγή χρήστη

ψήφοι
7

Ο compiler LCC ( wikipedia ) ( αρχική σελίδα του προγράμματος ) of Fraser και Hanson περιγράφεται στο βιβλίο τους "A Retargetable C Compiler: Σχεδιασμός και Υλοποίηση". Είναι αρκετά ευανάγνωστο και εξηγεί το σύνολο της μεταγλώττισης, μέχρι παραγωγή κώδικα.

Απαντήθηκε 16/09/2008 στις 17:21
πηγή χρήστη

ψήφοι
7

Python έρχεται πακέτο με ένα compiler python γραμμένο σε Python. Μπορείτε να δείτε τον πηγαίο κώδικα, και περιλαμβάνει όλες τις φάσεις, από την ανάλυση, αφηρημένο συντακτικό δέντρο, εκπέμπουν κώδικα, κλπ Hack αυτό.

Απαντήθηκε 12/08/2008 στις 12:25
πηγή χρήστη

ψήφοι
6

Δεν είναι ένα βιβλίο, αλλά ένα τεχνικό χαρτί και μια πάρα πολύ διασκεδαστική εμπειρία μάθησης, αν θέλετε να μάθετε περισσότερα για μεταγλωττιστές (και metacompilers) ... Αυτή η ιστοσελίδα σας καθοδηγεί μέσα από την οικοδόμηση μιας εντελώς αυτόνομο σύστημα compiler που μπορεί η ίδια και άλλες γλώσσες συγκεντρώνουν:

Tutorial: Metacompilers Μέρος 1

Αυτό είναι όλα βασίζονται σε ένα εκπληκτικό μικρό 10-σελίδα τεχνικές χαρτί:

Val Schorre META II: Α Σύνταξη-Oriented μεταγλωττιστή γλώσσα γραφής

από ειλικρινείς-to-θεό 1964. Έμαθα πώς να οικοδομήσουμε compilers από αυτό πίσω στο 1970. Υπάρχει ένα μυαλό-blowing στιγμή που τελικά κατανοήσω πώς ο compiler μπορεί να ανανεώνεται από μόνος ....

Ξέρω την ιστοσελίδα του συγγραφέα από τις ημέρες μου στο κολέγιο, αλλά δεν έχω τίποτα να κάνει με την ιστοσελίδα.

Απαντήθηκε 28/08/2009 στις 01:01
πηγή χρήστη

ψήφοι
5
  1. Αυτό είναι ένα τεράστιο θέμα. Μην υποτιμάτε αυτό το σημείο. Και μην υποτιμάτε το σημείο μου για να μην το υποτιμούμε.
  2. Ακούω το Δράκο βιβλίο είναι ένας (ο;) θέση για να αρχίσει, μαζί με την αναζήτηση. :) Πάρτε καλύτερα σε αναζήτηση, τελικά θα είναι η ζωή σας.
  3. Η οικοδόμηση δική σας γλώσσα προγραμματισμού είναι απολύτως μια καλή άσκηση! Αλλά ξέρετε ότι ποτέ δεν θα χρησιμοποιηθούν για οποιονδήποτε πρακτικό σκοπό στο τέλος. Εξαιρέσεις σε αυτό είναι λίγες και πολύ μακριά μεταξύ.
Απαντήθηκε 20/07/2009 στις 23:44
πηγή χρήστη

ψήφοι
5

Αν σας ενδιαφέρει η σύνταξη ενός μεταγλωττιστή για μια λειτουργική γλώσσα (και όχι ένα διαδικαστικό ένα) Simon Peyton-Jones και ο David Lester του « Εφαρμογή λειτουργικές γλώσσες: ένα σεμινάριο » είναι ένας εξαιρετικός οδηγός.

Οι εννοιολογική βασικά για το πώς λειτουργεί η λειτουργική αξιολόγηση καθοδηγείται από τα παραδείγματα σε μια απλή αλλά ισχυρή λειτουργική γλώσσα που ονομάζεται «πυρήνα». Επιπλέον, κάθε μέρος της γλώσσας Πυρήνα μεταγλωττιστή εξηγείται με παραδείγματα κώδικα σε Miranda (μια καθαρή λειτουργική γλώσσα πολύ παρόμοια με Haskell).

Αρκετοί διαφορετικοί τύποι των μεταγλωττιστών που περιγράφονται, αλλά ακόμα και αν ακολουθήσετε μόνο το λεγόμενο πρότυπο compiler για Πυρήνας θα έχετε μια εξαιρετική κατανόηση του τι κάνει λειτουργικών τσιμπούρι προγραμματισμού.

Απαντήθηκε 01/10/2008 στις 10:30
πηγή χρήστη

ψήφοι
5

Υπάρχουν πολλές καλές απαντήσεις εδώ, οπότε σκέφτηκα να προσθέσω ένα ακόμη στον κατάλογο:

Πήρα ένα βιβλίο με τίτλο έργου Oberon περισσότερο από μια δεκαετία πριν, η οποία έχει μερικά πολύ καλογραμμένο κείμενο για τον compiler. Το βιβλίο πραγματικά ξεχωρίζει με την έννοια ότι η πηγή και οι εξηγήσεις είναι πολύ χέρια και να αναγνώσιμο. Το πλήρες κείμενο (η έκδοση 2005) έχει διατεθεί σε μορφή pdf, ώστε να μπορείτε να κατεβάσετε τώρα. Ο compiler συζητείται στο κεφάλαιο 12:

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

Niklaus Wirth, Jürg Gutknecht

(Η θεραπεία δεν είναι τόσο εκτεταμένη όσο βιβλίο του για compilers)

Έχω διαβάσει πολλά βιβλία για μεταγλωττιστές, και μπορώ να το δεύτερο το βιβλίο δράκο, ο χρόνος που δαπανάται σε αυτό το βιβλίο είναι πολύ αξίζει τον κόπο.

Απαντήθηκε 19/09/2008 στις 00:31
πηγή χρήστη

ψήφοι
4

Μπορείτε να χρησιμοποιήσετε BCEL από το Ίδρυμα Ελεύθερου Λογισμικού Apache. Με αυτό το εργαλείο μπορείτε να δημιουργήσετε συναρμολόγησης που μοιάζει με τον κωδικό, αλλά είναι Java με το API BCEL. Μπορείτε να μάθετε πώς μπορείτε να δημιουργήσετε ενδιάμεσου κώδικα γλώσσας (σε αυτή την περίπτωση κώδικα byte).

απλό παράδειγμα

  1. Δημιουργήστε μια κλάση Java με αυτή τη λειτουργία:

    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";
        }
    }
    

Τώρα τρέχει BCELifier με αυτή την κατηγορία

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

Μπορείτε να δείτε το αποτέλεσμα στην κονσόλα για όλη την τάξη (το πώς να οικοδομήσουμε κώδικα byte MyClass.java). Ο κωδικός για τη λειτουργία είναι η εξής:

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();
}
Απαντήθηκε 14/07/2011 στις 16:42
πηγή χρήστη

ψήφοι
4

Μου άρεσε το φροντιστήριο Crenshaw πάρα πολύ, διότι καθιστά απολύτως σαφές ότι ο compiler είναι απλώς άλλο ένα πρόγραμμα που διαβάζει κάποια είσοδο και γράφει μερικά από πώλησης.

Διαβασέ το.

Εργασία, αν θέλετε, αλλά στη συνέχεια να εξετάσουμε μια άλλη αναφορά σχετικά με το πώς είναι μεγαλύτερα και πιο ολοκληρωμένη μεταγλωττιστές πραγματικά γραμμένο.

Και διαβάστε την εμπιστοσύνη Εμπιστοσύνη , για να πάρετε μια ιδέα για τα μη προφανή πράγματα που μπορούν να γίνουν σε αυτόν τον τομέα.

Απαντήθηκε 22/08/2008 στις 16:57
πηγή χρήστη

ψήφοι
3

Δεν περιλαμβάνονται στη λίστα μέχρι στιγμής είναι αυτό το βιβλίο:

Βασικά στοιχεία του Compiler Σχεδιασμού (Torben Mogensen) (από το dept. Επιστήμης Υπολογιστών, Πανεπιστήμιο της Κοπεγχάγης)

Είμαι, επίσης, ενδιαφέρονται να μάθουν για μεταγλωττιστές και σχεδιάζουν να εισέλθουν στην βιομηχανία στα επόμενα δύο χρόνια. Το βιβλίο αυτό είναι το ιδανικό βιβλίο θεωρίας για να ξεκινήσει συντάκτες της μάθησης όσο μπορώ να δω. Είναι ΔΩΡΕΑΝ για να αντιγράψετε και να αναπαραχθούν, καθαρά και προσεκτικά γραμμένο και δίνει σε σας σε απλά αγγλικά χωρίς κωδικό, αλλά εξακολουθεί να παρουσιάζει τους μηχανισμούς μέσω των οδηγιών και διαγράμματα κλπ Αξίζει μια ματιά ΙΜΟ.

Απαντήθηκε 12/03/2014 στις 17:05
πηγή χρήστη

ψήφοι
3

Λείπουν από τη λίστα: Συλλογή Σκουπίδια: Αλγόριθμοι για την αυτόματη διαχείριση Δυναμική Μνήμη, με Jones και Lins.

(Υποθέτοντας ότι είστε γραπτώς τον compiler και runtime σύστημα, και ότι είστε εφαρμογή των απορριμμάτων που συλλέγονται γλώσσα.

Απαντήθηκε 27/06/2010 στις 00:43
πηγή χρήστη

ψήφοι
3

Έχω γράψει ένα online tutorial για το σχεδιασμό compiler, με τίτλο «Ας οικοδομήσουμε μια scripting κινητήρα-Compiler, καθώς και η μητρική μεταγλωττιστή κώδικα που ονομάζεται Bxbasm Το Ηλεκτρονικό έγγραφο είναι στη διεύθυνση:. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

Τα έγγραφα, αρχεία υποστήριξης και compiler, σε μορφή zip, στο: http://geocities.com/blunt_axe_basic

Επίσης: http://tech.groups.yahoo.com/group/QDepartment

Ο Steve A.

Απαντήθηκε 13/01/2009 στις 23:31
πηγή χρήστη

ψήφοι
3

Ο Δράκος βιβλίο είναι πολύ περίπλοκο. Έτσι, αγνοούν ως σημείο εκκίνησης. Είναι καλό και θα σας κάνει να σκεφτείτε πολύ, αφού έχετε ήδη ένα σημείο εκκίνησης, αλλά για ορεκτικά, ίσως θα πρέπει απλώς να προσπαθήσει να γράψει ένα αξιολογητή μαθηματικά / λογική έκφραση που χρησιμοποιούν RD, LL ή LR ανάλυσης τεχνικές με τα πάντα (Lexing / ανάλυσης) γραπτή με το χέρι σε ίσως C / Java. Αυτό είναι ενδιαφέρουσα από μόνη της και σας δίνει μια ιδέα για τα προβλήματα που συνδέονται με ένα compiler. Στη συνέχεια, μπορείτε να μεταβείτε στο δικό σας DSL χρησιμοποιώντας κάποια γλώσσα προγραμματισμού (από την επεξεργασία των κειμένων είναι συνήθως πιο εύκολο σε αυτές) και, όπως είπε κάποιος, τη δημιουργία κώδικα είτε στην γλώσσα προγραμματισμού ίδια ή C. Θα πρέπει πιθανώς να χρησιμοποιήσετε flex / bison / ANTLR κλπ για να κάνει το Lexing / την ανάλυση, αν πρόκειται να το κάνουμε σε c / java.

Απαντήθηκε 01/10/2008 στις 21:24
πηγή χρήστη

ψήφοι
2

Είμαι έκπληκτος που δεν έχει αναφερθεί, αλλά Donald Knuth του Η τέχνη του προγραμματισμού υπολογιστών αρχικά έγραψε ως ένα είδος tutorial για το μεταγλωττιστή γραφής.

Φυσικά, τάση Δρ Knuth της για να πάει σε βάθος για θέματα που οδήγησε στην φροντιστήριο compiler-γραφής να επεκταθεί σε περίπου 9 τόμους, μόνο τρία από τα οποία έχουν όντως δημοσιευθεί. Είναι μια μάλλον πλήρη έκθεση σχετικά με θέματα προγραμματισμού, και καλύπτει όλα όσα θα πρέπει να ξέρετε για τη σύνταξη ενός compiler, με λεπτομέρειες λεπτό.

Απαντήθηκε 21/07/2009 στις 01:20
πηγή χρήστη

ψήφοι
2

Ως σημείο εκκίνησης, θα ήταν καλό να δημιουργήσετε μια αναδρομική κατάβαση αναλυτή (ΠΑΑ) (ας υποθέσουμε ότι θέλετε να δημιουργήσετε τη δική σας γεύση της BASIC και να οικοδομήσουμε ένα διερμηνέα BASIC) για να καταλάβουμε πώς να γράψει ένα compiler. Βρήκα την καλύτερη πληροφόρηση των χρηστών C Ισχύς Herbert Schild, το κεφάλαιο 7. Το κεφάλαιο αυτό αναφέρεται σε ένα άλλο βιβλίο του Η Schildt «C Η πλήρης αναφορά», όπου εξηγεί πώς μπορείτε να δημιουργήσετε μια αριθμομηχανή (ένα απλό πρόγραμμα ανάλυσης της έκφρασης). Βρήκα δύο βιβλία σχετικά με το eBay πολύ φθηνά. Μπορείτε να ελέγξετε τον κώδικα για το βιβλίο, αν πάτε σε www.osborne.com ή να ελέγξετε το www.HerbSchildt.com βρήκα τον ίδιο κωδικό, αλλά για C # στο τελευταίο του βιβλίο

Απαντήθηκε 20/08/2008 στις 12:16
πηγή χρήστη

ψήφοι
1

Αν δεν είστε απλά ψάχνουν για βιβλία, αλλά ενδιαφέρονται και σε ιστοσελίδες που έχουν άρθρα σχετικά με το θέμα, έχω blogged σχετικά με διάφορες πτυχές της δημιουργίας μιας γλώσσας προγραμματισμού. Οι περισσότερες από τις θέσεις μπορούν να βρεθούν στο blog μου κατηγορία «σχεδιαστική γλώσσα» .

Ειδικότερα, καλύπτουν την παραγωγή της Intel κώδικα μηχανής με μη αυτόματο τρόπο, δημιουργώντας αυτόματα από μηχανικό ή bytecode, δημιουργώντας ένα διερμηνέα bytecode, γράφοντας ένα αντικείμενο με προσανατολισμό το χρόνο εκτέλεσης, δημιουργώντας ένα απλό φορτωτή, και γράφοντας ένα απλό συλλέκτη σκουπιδιών σήμα / σκούπισμα. Όλα αυτά σε ένα πολύ πρακτικό και ρεαλιστικό τρόπο, αντί βαρετό σας με πολλά θεωρίας.

Θα εκτιμούσα σχόλια σχετικά με αυτά.

Απαντήθηκε 02/04/2014 στις 13:39
πηγή χρήστη

ψήφοι
1

Ο πιο γρήγορος προσέγγιση είναι μέσω δύο βιβλία:

1990 έκδοση του Εισαγωγή στην Συγκέντρωση τεχνικές, πρώτο πιάτο, χρησιμοποιώντας ANSI C, LeX και Yacc από JP Bennett - μια τέλεια ισορροπία παράδειγμα κώδικα, την ανάλυση της θεωρίας και design, περιέχει μια πλήρη compiler γραμμένο σε C, lex και yacc για ένα απλή γραμματική

Δράκος Βιβλίου (παλαιότερη έκδοση) - ως επί το πλείστον μια λεπτομερή αναφορά για τα χαρακτηριστικά που δεν καλύπτονται από την πρώην βιβλίου

Απαντήθηκε 01/04/2011 στις 20:39
πηγή χρήστη

ψήφοι
1

Κάθε φορά που θέλετε να δοκιμάσετε μια νέα γλώσσα ιδέα, εγώ απλά γράψτε ένα απλό πρόγραμμα ανάλυσης, και έχουν δημιουργήσει κάποια γλώσσα που είναι εύκολο να έχουμε καλή μεταγλωττιστές για την, όπως η C.

Πώς νομίζετε C ++ έγινε;

Απαντήθηκε 21/07/2009 στις 01:42
πηγή χρήστη

ψήφοι
1

Αν είστε σαν εμένα, που δεν έχει καμία επίσημη επιστήμη των υπολογιστών της εκπαίδευσης, και ενδιαφέρεται για κτίριο / θέλετε να μάθετε πώς λειτουργεί ένα compiler:

Είμαι συνιστά «Επεξεργαστές Γλώσσα προγραμματισμού σε Java: Μεταφραστές και Διερμηνείς», ένα καταπληκτικό βιβλίο για ένα αυτοδίδακτος προγραμματιστής ηλεκτρονικών υπολογιστών.

Από τη δική μου άποψη, η κατανόηση εκείνων βασική θεωρία της γλώσσας, την αυτοματοποίηση των μηχανών, και την θεωρία των συνόλων δεν είναι ένα μεγάλο πρόβλημα. Το πρόβλημα είναι πώς να μετατρέψει αυτά τα πράγματα σε κώδικα. Το παραπάνω βιβλίο σας λέει πώς να γράψετε ένα πρόγραμμα ανάλυσης, το πλαίσιο ανάλυσης, και τη δημιουργία κώδικα. Εάν δεν μπορείτε να καταλάβετε αυτό το βιβλίο, τότε έχω να πω, να εγκαταλείψει την κατασκευή ενός μεταγλωττιστή. Το βιβλίο είναι το καλύτερο βιβλίο προγραμματισμού που έχω διαβάσει ποτέ.

Υπάρχει ένα άλλο βιβλίο, επίσης καλό, Μεταγλωττιστές σε C . Υπάρχει μια πολύ κώδικα, και σας λέει τα πάντα για το πώς να οικοδομήσουμε ένα compiler και λεκτικού εργαλεία.

Η οικοδόμηση ενός compiler είναι ένα διασκεδαστικό πρακτική προγραμματισμού και μπορεί να σας διδάξει τους σωρούς των δεξιοτήτων προγραμματισμού.

Μην αγοράσετε το βιβλίο του Δράκου . Ήταν μια σπατάλη των χρημάτων και χρόνου και δεν είναι για έναν επαγγελματία.

Απαντήθηκε 05/02/2009 στις 03:55
πηγή χρήστη

ψήφοι
0
  • Ξεκινήστε κάνοντας βεβαιωθείτε ότι μπορείτε να απαντήσετε περισσότερα από τα ερωτήματα ετικέτα C ++ εδώ για υπερχείλιση στοίβας.
  • Μετά από αυτό, θα πρέπει να βεβαιωθείτε ότι έχετε κατανοήσει πώς λειτουργούν τα άλλα compilers και να καταλάβουν [μέρη του] πηγαίο κώδικα τους.
  • Θα παρατηρήσετε θα πρέπει συναρμολόγησης και θα αρχίσουν να μαθαίνουν συναρμολόγησης μέχρι να μπορεί να απαντήσει σε πολλές ερωτήσεις με αυτή την ετικέτα.
  • Εάν έχετε έρθει μέχρι εδώ, θα διαπιστώσετε ότι έχουν περάσει πολλά χρόνια και να συνειδητοποιήσει πόσο μεγάλο ένα τέτοιο έργο είναι και, ενδεχομένως, το χαμόγελο με δική σας ερώτηση από τότε (αν αυτή τη σελίδα εξακολουθεί να υπάρχει εκείνη τη στιγμή) ...
Απαντήθηκε 21/07/2009 στις 00:01
πηγή χρήστη

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