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
12
A
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.
- Questo fa un paio di cose:
- 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
- GeneratedFiles (Tutti i file in questa cartella vengono aggiunti come i collegamenti ai file situati in GrammarProject \ obj \ Debug)
- GrammarProject
- Soluzione
- 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#.
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);
}
}
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
Eccellente. Ho funzionato su VS2015. –
Come compilare la grammatica? Compilo il progetto, ma non ci sono file cs nella directory obj. – Exerion