2009-10-13 17 views
26

Sto pianificando di scrivere un compilatore C# 3.0 in C#. Dove posso ottenere la grammatica per la generazione di parser?Dove posso trovare la grammatica C# 3.0?

Preferibilmente uno che funziona con ANTLR v3 senza modifiche.

+6

Siete consapevoli che abbiamo già spedito gratuitamente un compilatore che compila C# 3, giusto? :-) Ma seriamente, perché costruisci il tuo? Solo per divertimento, o c'è qualche scopo commerciale? (La ragione per cui lo chiedo è perché siamo molto interessati ad apprendere quali "servizi" le persone vogliono dal nostro compilatore oltre a "sputarmi qualche IL per questo codice sorgente"). –

+1

Eric: Principalmente per divertimento. Tuttavia, di tanto in tanto mi vengono in mente alcune idee linguistiche che vorrei poter testare. –

+0

@Mehrdad, se ottieni del codice, posso giocarci :) –

risposta

7

Mi sono imbattuto in ANTLR C# Grammar on CodePlex. È un progetto relativamente nuovo e utilizza ANTLR 3.2. Dice che supporta C# 4.0 ed è concesso in licenza con Eclipse Public License (EPL).

Ho giocato un po '. Ha un sacco di file di test contenenti espressioni. Supporta lambda, contesto non sicuro, ... come ci si aspetterebbe naturalmente. Analizza un file C# e ti consegna un albero di sintassi astratto. Puoi fare quello che vuoi con esso.

3

Stai cercando qualcosa come this o this?

Fare riferimento anche alla domanda C# ANLTR grammar.

+1

La grammatica collegata non è C# 3.0. Non supporta lambda. Questo è particolarmente importante per me. –

+2

Sembrerebbe che l'aggiunta di supporto per lambda in termini di costrutti esistenti nella grammatica sia abbastanza semplice, poiché è sufficiente definire l'elenco degli argomenti.Questo probabilmente avrà bisogno di LL (*), tuttavia, dal momento che è possibile analizzare qualcosa come '(a **' e non sapere se questo finirà per essere un'espressione come '(a ** b)' (cioè moltiplicare 'a' di il risultato di una dereferenziazione di 'b'), o un'espressione lambda' (a ** b) => ', fino a quando non si preme' => '. Poiché non vi è alcun limite sulla quantità di indirezione (puntatore a puntatore a .. .), sembra che sia LL (*) per me, ma poiché ANTLR3 supporta opt-in LL (*), non è un problema –

+0

@Pavel: Non è solo questo: non supporta i generici. Probabilmente scriverò da zero il mio parser o grammatica se non riesco a trovare una grammatica C# 3.0 ragionevolmente buona –

3

Dai un'occhiata a COCO/R sembra che abbiano le specifiche della lingua per C# 3.0.

12

Dai uno sguardo allo C# Language Specification. Nel capitolo B. Grammatica troverai la grammatica.

+0

Sì, naturalmente la specifica contiene la grammatica.Tuttavia, la grammatica in quel documento * Word * è sparsa attraverso l'intero documento e non è adatto per la generazione di parser –

+8

Non è * solo * sparsi ovunque, abbiamo un'appendice alla fine con il tutto in un unico posto. Probabilmente hai ragione d fare qualche modifica per farlo funzionare per un generatore di parser. –

+1

Eric: Oh, non ho notato quella sezione. Grazie per la segnalazione. –

Problemi correlati