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
12
A
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.
- to robi kilka rzeczy:
- 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
- GeneratedFiles (Wszystkie pliki w tym folderze są dodawane jako linki do plików znajdujących się w GrammarProject \ obj \ Debug)
- GrammarProject
- Rozwiązanie
- 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#.
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);
}
}
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
Doskonały. Mam to działa na VS2015. –
Jak skompilować gramatykę? Kompiluję projekt, ale nie ma plików cs w katalogu obj. – Exerion