2009-08-31 7 views
6

Voglio scrivere un parser-generator a scopo didattico, e mi chiedevo se ci sono alcune risorse o tutorial online che spiegano come scriverne uno. Qualcosa sulla falsariga di "Costruiamo un compilatore" di Jack Crenshaw.Risorse online per scrivere un parser-generator

Voglio scrivere il generatore di parser per la grammatica LR (1).

Ho una buona conoscenza della teoria alla base dell'azione e delle tabelle di goto, ma desidero alcune risorse che mi aiuteranno a implementarlo.

Le lingue preferite sono C/C++, Java anche se altre lingue sono OK.

Grazie.

risposta

8

Sono d'accordo con gli altri, il libro di Dragon è un buon sfondo per l'analisi di LR.

Se siete interessati a parser discesa ricorsiva, un'esperienza di apprendimento enormemente il divertimento è questo sito web, che ti guida attraverso la costruzione di un sistema di compilatore completamente autonomo che può compilare se stesso e altre lingue:

MetaII Compiler Tutorial

Questo è tutto basato su un sorprendente piccolo documento tecnico di 10 pagine di Val Schorre: META II: Un linguaggio di compilazione orientato alla sintassi da onesto a dio 1964. Ho imparato come compilare i compilatori da questo indietro nel 1970. C'è un momento strabiliante quando finalmente riesci a capire come il compilatore può rigenerarsi ...

Conosco l'autore del sito web dai tempi del college, ma non ho nulla a che fare con il sito web.

1

Non proprio online, ma lo Dragon Book ha discussioni abbastanza elaborate sull'analisi di LR.

2

Se si volesse percorrere il percorso del pitone, consiglierei quanto segue.

ho trovato entrambe queste ad essere estremamente utile e Paul McGuire autore di pyparsing è super a voi dare una mano quando si esegue in problemi. Il libro Text Processing in Python è solo un utile riferimento per avere a portata di mano i suggerimenti e ti aiuta a metterti nel giusto stato d'animo quando si tenta di costruire un parser.

Vorrei anche sottolineare che un linguaggio OO è più adatto come motore di analisi del linguaggio perché è estensibile e il polimorfismo è il modo giusto per farlo (IMHO). Guardando il problema in termini di una macchina a stati piuttosto che "Cerca un punto e virgola alla fine di xyz" dimostrerai che il tuo parser diventa molto più robusto alla fine.

Spero che aiuti!

0

Ho trovato più facile imparare a scrivere i parser di discesa ricorsiva prima di imparare a scrivere i parser LR. A dire il vero, dopo molti anni passati a scrivere parser, non ho mai ritenuto necessario scrivere un parser LR.

Ho recentemente scritto un tutorial su CodeProject chiamato Implementing Programming Language Tools in C# 4.0 che descrive le tecniche di analisi della discesa ricorsive.