2009-07-28 9 views

risposta

6

Gold è ok per quanto riguarda un parser generatori di andare.

+0

Direi che è piuttosto buono l'OP – SpaceghostAli

+3

LL (k). L'oro è LALR. –

+0

correggimi se ho torto: non sono presenti grammatiche LL grammatiche LALR? –

4

Si potrebbe voler guardare MinosseCC, una porta di JavaCC in C#. Un'altra possibilità è Spart.

+1

MinosseCC è stata rinominata CSharpCC. La versione corrente è su Google Code space ed è la porta di JavaCC 3.2, mentre una versione di sviluppo (porta di JavaCC 5.0) è in fase di sviluppo su GitHub (http://github.com/deveel/csharpcc) – Antonello

22

ANTLR (niente altro da dire)

+16

bene è necessario dì qualcosa per ottenere 15 caratteri. ;) +1 – kenny

+0

Penso che ANTLR abbia problemi reali dando i messaggi di errore corretti. Buona fortuna a capire ad es. dove mettere la specifica @inlude! La documentazione è sconcertante e non mostra mai il modo preferito di fare cose. Le grammatiche sugli alberi sono una perdita di tempo .. il sito ANTLR ha anche un enorme blog su questo. –

+1

Hmm, sembra http://www.antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target è stato aggiornato l'ultima volta 3 anni fa e mancano tutti i blocchi di codice - aspetta, no, è proprio quello che succede quando JavaScript è disabilitato. Ad ogni modo, C# è sempre stato un obiettivo ANTLR di seconda classe. Quando l'ho usato per la prima volta, il codice sorgente di C# Runtime non era disponibile: l'autore (non lo stesso dell'autore di ANTLR) ha rilasciato il binario senza licenza IIRC specificata e ha lasciato la faccia della terra. Ho usato Reflector per ricostruire il codice sorgente. – Qwertie

3

C'è un nuovo generatore di parser sul blocco chiamato LLLPG, che supporta grammatiche LL (k) e asserzioni a larghezza zero. Può essere usato senza una libreria di runtime (è sufficiente una classe base). La documentazione è abbastanza dettagliata ora, e ho usato LLLPG per analizzare la maggior parte di un dialetto di C# chiamato Enhanced C# (che, di fatto, è la lingua di input principale di LLLPG). La sintassi di input non è EBNF, tuttavia (è una specie di mashup di C# + codice stile ANTLR).

Full disclosure: l'ho scritto. Domande benvenute