2009-11-02 19 views
9

Ho iniziato a studiare ANTLR e ad avere sia il libro del 2007 "The Definitive ANTLR Reference" che ANTLRWorks (uno strumento interattivo per la creazione di grammatiche). E, essendo quel tipo di persona, ho iniziato al capitolo 3. ("Un giro veloce per gli impazienti").Iniziare con ANTLR ed evitare errori comuni

È un processo abbastanza doloroso, soprattutto perché alcuni errori sono piuttosto impenetrabili (ad esempio, ANTLR: "missing attribute access on rule scope" problem che significa solo per me "hai qualcosa di sbagliato"). Inoltre ho alcune grammatiche molto semplici (solo 3-4 produzioni) e semplici input (2 righe) che quando vengono eseguite danno l'errore "OutOfMemory".

Il sito ANTLR è utile ma in qualche modo frammentato e alcuni utenti SO hanno commentato (https://stackoverflow.com/questions/278480/good-tutorial-for-antlr) che il libro e le esercitazioni prevedono un livello di ingresso elevato. Sono stato riluttante ad approcciare l'elenco di discussione ANTLR per questo motivo.

LATER Stiamo iniziando a fare i conti con esso. Sarebbe utile avere esempi semplici e affidabili che potrebbero essere gentilmente espansi. Vale certamente la pena imparare come abbiamo rimodellato un bel po 'del nostro pensiero basato su ANTLR.

Un problema è che ANTLR V3 presenta modifiche significative rispetto a V2. Una risposta su SO (e sulle pagine ANTLR) faceva riferimento a una sintassi V2 che non è più disponibile.

Alcune delle domande ANTLR su SO mi hanno aiutato molto, ma trovarle è un po 'ad hoc. Quindi mi piacerebbe sapere come gli utenti SO possono aiutare a rendere meno doloroso il processo di apprendimento. (Se si fa riferimento al libro di riferimento, sarebbe utile indicare pagine particolari).

MODIFICA. @duffymo e @JamesAnderson hanno confermato che ANTLR è un lavoro duro, soprattutto perché i parser sono difficili. (FWIW ho passato a LEX/YACC, ecc. E non c'è dubbio che ANTLR sia più potente e più facile da usare.) Penso che sarebbe comunque utile avere aree in cui è possibile evitare di fare il fouling:

  • assicurare la corretta capitalizzazione dei nomi delle variabili
  • nome del pacchetto aggiuntivo per lexer e parser
  • prendersi cura su ordine delle regole, poiché colpisce la precedenza

e più di questo genere sarebbe utile.

+0

Per quanto non espressamente su ANTLR, Ter ha scritto un libro in seguito chiamato linguaggio modelli di attuazione. È un * eccellente * lavoro con rilevanza sia per i principianti che per i veterinari. I | MVHO è un must assoluto per chiunque lavori sul parsing. –

risposta

7

Sono d'accordo - ANTLR non è per i deboli di cuore. Si aspetta un alto livello di entrata, perché grammatiche e parser non sono banali.

Detto questo, ecco alcuni suggerimenti:

  1. Dimenticate v2. La versione 3 è lo standard; non perdere nemmeno tempo considerando la versione precedente o la sua documentazione.
  2. OutOfMemoryError ti dice che c'è qualcosa di circolare nella grammatica che hai definito.
  3. IntelliJ ha un IDE meraviglioso per lavorare con ANTLR v3. Ti fornirà una rappresentazione grafica della tua grammatica, il debugging passo a passo, ecc. Se hai intenzione di fare molto lavoro con ANTLR, varrebbe qualche dollaro per comprare una licenza.

ANTLR non sarà facile da padroneggiare. Il libro è buono, ma denso. I messaggi di errore sono criptici, come hai notato.Sarei sorpreso se qualcuno qui potesse renderlo facile.

+0

Giusto per sottolineare, ANTLRWorks è anche impressionante per la costruzione di grammatiche e ha caratteristiche molto simili a voi la lista per IntelliJ. – RCIX

+0

ANTLRWorks è un plug-in IntelliJ. Non l'ho usato al di fuori dell'IDE. – duffymo

5

Scusa ma la mia esperienza di ANTLR (in effetti javacc, bisonte o qualsiasi analizzatore di funzioni complete) è che la maggior parte del vostro apprendimento sarà risolvendo i vostri errori!

Ottenere buoni esempi di codice di altri popoli lo ridurrà un po ', i migliori esempi sembrano davvero semplici - ma ti manca tutto il sudore e la trazione dei capelli per farli sembrare così facile.

+0

+1 Questo è veramente utile. –

+5

L'ho appena iniziato, e "hair pulling" è la terminologia tecnica corretta per la curva di apprendimento associata a ANTLR. Anche se ho la sensazione che una volta raggiunta la vetta del monte ANTLR, la vista dall'alto è spettacolare. –

2

Anche se si preferisce linea di comando, vale la pena usando AntlrWorks quando si hanno problemi. La rappresentazione schematica può rendere più facile vedere cosa sto sbagliando.

una foto vale più di mille messaggi di errore.