2013-10-11 13 views
12

Desidero utilizzare Antlr4 per analizzare alcuni file nella mia applicazione C#. Sono stato in grado di generare i file parser e lexer finora dato il mio grammer. Ora mi piacerebbe usare leggere i file e applicare il parser e il lexer a loro. Ho cercato la documentazione su come farlo, ma sto arrivando a breve. Ho trovato alcuni vecchi esempi usando le versioni precedenti di Antlr ma non sembrano funzionare per Antlr4. Qualsiasi aiuto sarebbe apprezzato. Grazie.Esercitazione applicativa Antlr4 C#/Esempio

risposta

10

provare con

using (StreamReader fileStream = new StreamReader(fileName)) { 
    AntlrInputStream inputStream = new AntlrInputStream(fileStream); 

    SearchLexer lexer = new SearchLexer(inputStream); 
    CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); 
    SearchParser parser = new SearchParser(commonTokenStream); 

    parser.RemoveErrorListeners(); 
    parser.AddErrorListener(new ErrorListener()); // add ours 

    parser.root(); 
} 
22
  • In Visual Studio, andare in Strumenti -> Estensioni e aggiornamenti e cercare la sezione online "Language Support ANTLR" di Sam Harwell. Maggiori informazioni possono essere trovate sul GitHub project site
    • Questo fa un paio di cose:
      • Aggiunge modelli per le grammatiche combinati.
      • Aggiunge l'evidenziazione della sintassi
      • Aggiunge una destinazione MSBuild per la grammatica per generare il parser.
  • nella soluzione, Impostare la struttura progetto come questo:
    • Soluzione
      • GrammarProject
        • Calculator.g4
      • ImplementationProj ect
        • GeneratedFiles (Tutti i file in questa cartella vengono aggiunti come i collegamenti ai file situati in GrammarProject \ obj \ Debug)
          • CalculatorBaseListener.cs
          • CalculatorBaseVisitor.cs
          • CalculatorLexer.cs
          • CalculatorListener.cs
          • CalculatorParser.cs
          • CalculatorVistor.cs
        • MyCalcualtorImplementation.cs
  • scrittura e compilare la grammatica.
  • Nella cartella per i collegamenti ai file generati, fare clic con il pulsante destro del mouse sulla cartella e fare clic su Aggiungi -> Elemento esistente
  • Passare al progetto grammatica \ obj \ Debug e selezionare tutti i file parser generati.
  • Questo passaggio successivo è importante. Sul pulsante Aggiungi c'è una piccola freccia a discesa. Fare clic sulla freccia del menu a discesa e fare clic su "Aggiungi come collegamento".
    • Ciò aggiungerà i file generati al progetto di implementazione utilizzando un collegamento simbolico anziché una copia diretta.
    • Ciò offre l'ulteriore vantaggio di non dover rimuovere e riaggiungere i file parser se è necessario modificare la grammatica in seguito.
  • Una volta arrivato a questo punto, è possibile ereditare da GrammarProject.CalculatorBaseListener o GrammarProject.CalculatorBaseParser a seconda del modello di sviluppo che si è deciso di utilizzare.

Come nota a margine, "The Definitive ANTLR 4 Reference" di Terence Parr è un'eccellente risorsa per comprendere come funziona ANTLR4 e gli schemi di sviluppo delle differenze. Tutti gli esempi sono in java, ma i concetti si applicano sia a Java che a C#.

+1

C'è un aggiornamento per Visual Studio 2015? Non sono stato in grado di installare ANTLR Language Support nel 2015 e non sono riuscito a farlo funzionare in modo manuale (la documentazione del progetto ti guida attraverso una versione precedente che non riesco a far funzionare nel 2015) – Brandon

+0

Eccellente. Ho funzionato su VS2015. –

+0

Come compilare la grammatica? Compilo il progetto, ma non ci sono file cs nella directory obj. – Exerion

0

qui sono un campione di ErrorListener

public class ErrorListener : BaseErrorListener 
{ 
    public void SyntaxError(IRecognizer recognizer, int offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e) 
    { 
     Console.WriteLine("{0}: line {1}/column {2} {3}", e, line, charPositionInLine, msg); 
    } 
}