Szukaj…


Wsparcie językowe

ANTLR jest w stanie generować parsery dla wielu języków programowania:

  1. C # Target
  2. Python Target
  3. JavaScript Target
  4. Java Target

Domyślnie ANTLR wygeneruje analizator składni z wiersza poleceń w języku programowania Java:

Java -jar antlr-4.5.3-complete.jar yourGrammar.g4 //Will output a
    java parser

Aby zmienić język docelowy, możesz uruchomić następującą komendę z terminala / linii komend systemu operacyjnego:

    antlr4 -Dlanguage=Python3 yourGrammar.g4 
//with alias
    java -jar antlr-4.5.3-complete.jar -Dlanguage=Python3 yourGrammar.g4 
//without alias

Zamiast używać parametru „-Dlanguage” w wierszu poleceń / terminalu za każdym razem, aby zbudować żądany analizator składni dla określonego języka, możesz wybrać cel z pliku gramatyki .g4, włączając cel w sekcji globalnej:

options {
    language  = "CSharp";
}
//or
options {
    language="Python";
}

Aby użyć wygenerowanego wyniku analizatora składni, upewnij się, że masz środowisko wykonawcze ANTLR dla określonego języka:

  1. Środowisko wykonawcze CSharp
  2. Środowisko wykonawcze Python 2
  3. środowisko wykonawcze python 3

Pełne instrukcje i informacje o bibliotekach wykonawczych ANTLR

Konfiguracja parsera Python

Po uruchomieniu pliku gramatyki .g4 z ANTLR.jar powinieneś wygenerować kilka plików, takich jak:

1.yourGrammarNameListener.py
2.yourGrammarNameParser.py
3.yourGrammarName.tokens
...

Aby użyć ich w projekcie Python, dołącz środowisko wykonawcze Python do swojego obszaru roboczego, aby każda rozwijana aplikacja mogła uzyskać dostęp do biblioteki ANTLR. Można to zrobić przez wyodrębnienie środowiska wykonawczego do bieżącego folderu projektu lub zaimportowanie go z IDE do zależności projektu.

#main.py
import yourGrammarNameParser
import sys

#main method and entry point of application

def main(argv):
    """Main method calling a single debugger for an input script"""
    parser = yourGrammarNameParser
    parser.parse(argv)

if __name__ == '__main__':
    main(sys.argv) 

Ta konfiguracja obejmuje analizator składni i akceptuje dane wejściowe z wiersza poleceń, aby umożliwić przetwarzanie pliku przekazanego jako parametr.

#yourGrammarNameParser.py
from yourGrammarNameLexer import yourGrammarNameLexer
from yourGrammarNameListener import yourGrammarNameListener
from yourGrammarNameParser import yourGrammarNameParser
from antlr4 import *
import sys

class yourGrammarNameParser(object):
    """
    Debugger class - accepts a single input script and processes
    all subsequent requirements
    """
def __init__(self): # this method creates the class object.
    pass
        
        
#function used to parse an input file
def parse(argv):
    if len(sys.argv) > 1:
        input = FileStream(argv[1]) #read the first argument as a filestream
        lexer = yourGrammarNameLexer(input) #call your lexer
        stream = CommonTokenStream(lexer)
        parser = yourGrammarNameParser(stream)
        tree = parser.program() #start from the parser rule, however should be changed to your entry rule for your specific grammar.
        printer = yourGrammarNameListener(tree,input)
        walker = ParseTreeWalker()
        walker.walk(printer, tree)
    else:
        print('Error : Expected a valid file')

Pliki te w połączeniu ze środowiskiem uruchomieniowym ANTLR oraz pliki wygenerowane z pliku gramatyki zaakceptują pojedynczą nazwę pliku jako argument oraz odczytują i analizują reguły gramatyczne.

Aby rozszerzyć podstawową funkcjonalność, należy także rozwinąć domyślny moduł nasłuchiwania, aby obsłużyć odpowiednie zdarzenia dla tokenów napotkanych podczas działania.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow