2013-10-11 9 views
12

Chcę użyć Antlr4 do parsowania niektórych plików w mojej aplikacji C#. Udało mi się wygenerować pliki parsera i lexera do tej pory, biorąc pod uwagę moje grammery. Teraz chciałbym użyć odczytu w plikach i zastosować do nich parser i lexer. Szukałem dokumentacji, jak to zrobić, ale niedługo wymyślę. Znalazłem kilka starych przykładów przy użyciu poprzednich wersji Antlr, ale nie wydają się działać dla Antlr4. Każda pomoc będzie doceniona. Dzięki.Antlr4 C# Tutorial aplikacji/Przykład

Odpowiedz

10

spróbuj

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
  • w Visual Studio, przejdź do Narzędzia -> Rozszerzenia i Aktualizacje i przeszukać sekcję Online dla "antlr językowe" Sam Harwell. Więcej informacji można znaleźć na GitHub project site
    • to robi kilka rzeczy:
      • Dodaje szablony dla połączonych gramatyk.
      • Dodaje podświetlanie składni
      • Dodaje obiekt docelowy MSBuild dla gramatyki w celu wygenerowania analizatora składni.
  • W swoim rozwiązaniu skonfigurować strukturę projektu tak:
    • Rozwiązanie
      • GrammarProject
        • Calculator.g4
      • ImplementationProj ect
        • GeneratedFiles (Wszystkie pliki w tym folderze są dodawane jako linki do plików znajdujących się w GrammarProject \ obj \ Debug)
          • CalculatorBaseListener.cs
          • CalculatorBaseVisitor.cs
          • CalculatorLexer.cs
          • CalculatorListener.cs
          • CalculatorParser.cs
          • CalculatorVistor.cs
        • MyCalcualtorImplementation.cs
  • Zapis i skompilowanie gramatyki.
  • W folderze zawierającym łącza do wygenerowanych plików kliknij folder prawym przyciskiem myszy i kliknij opcję Dodaj -> Istniejący element
  • Przejdź do projektu gramatyki \ obj \ Debug i wybierz wszystkie wygenerowane pliki analizatora składni.
  • Ten następny krok jest ważny. Na przycisku Dodaj znajduje się mała strzałka w dół. Kliknij strzałkę w dół i kliknij "Dodaj jako łącze".
    • Spowoduje to dodanie wygenerowanych plików do projektu wdrożenia przy użyciu dowiązania symbolicznego zamiast bezpośredniego.
    • Daje to dodatkową korzyść polegającą na tym, że nie trzeba usuwać i ponownie dodawać plików parsera, jeśli trzeba później zmienić gramatykę.
  • Po zdobyć tak daleko, to można dziedziczyć GrammarProject.CalculatorBaseListener lub GrammarProject.CalculatorBaseParser zależności od rozwoju wzór zdecydowaliśmy się użyć.

Na marginesie: "The Definitive ANTLR 4 Reference" autorstwa Terence'a Parra jest doskonałym źródłem informacji na temat działania ANTLR4 i różnic rozwojowych. Wszystkie przykłady są w języku Java, ale pojęcia dotyczą zarówno języka Java, jak i języka C#.

+1

Czy jest aktualizacja dla programu Visual Studio 2015? Do tej pory nie udało mi się zainstalować obsługi języków ANTLR w 2015 r. I nie udało się jej również ręcznie obsłużyć tej dokumentacji (dokumentacja tego projektu prowadzi Cię przez poprzednią wersję, której nie mogę uruchomić w 2015 r.) – Brandon

+0

Doskonały. Mam to działa na VS2015. –

+0

Jak skompilować gramatykę? Kompiluję projekt, ale nie ma plików cs w katalogu obj. – Exerion

0

oto próbka 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); 
    } 
}