Поиск…


Поддержка языков

ANTLR способен генерировать парсеры для ряда языков программирования:

  1. Цель C #
  2. Python Target
  3. Цель JavaScript
  4. Java-цель

По умолчанию ANTLR генерирует парсер из командной строки на языке программирования Java:

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

Чтобы изменить целевой язык, вы можете запустить следующую команду из терминала / командной строки OS:

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

Вместо того, чтобы каждый раз использовать параметр «-Dlanguage» в командной строке / терминале для создания нужного парсера для определенного языка, вы можете выбрать цель из вашего файла грамматики .g4, включив цель в глобальный раздел:

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

Чтобы использовать сгенерированный вывод синтаксического анализатора, убедитесь, что время выполнения ANTLR для указанного языка:

  1. Время выполнения CSharp
  2. Время выполнения Python 2
  3. Время выполнения python 3

Полные инструкции и информация о библиотеках времени выполнения ANTLR

Настройка парсера Python

После запуска вашего файла грамматики .g4 с помощью ANTLR.jar вам необходимо создать несколько файлов, например:

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

Чтобы использовать их в проекте python, используйте среду исполнения Python в рабочей области, чтобы любое приложение, которое вы разрабатываете, может получить доступ к библиотеке ANTLR. Это можно сделать, извлекая среду выполнения в текущую папку проекта или импортируя ее в свою среду IDE в зависимости от проекта.

#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) 

Эта настройка включает в себя ваш синтаксический анализатор и принимает входные данные из командной строки, чтобы разрешить обработку файла, переданного в качестве параметра.

#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')

Эти файлы в сочетании с временем выполнения ANTLR и вашими файлами, созданными из вашего файла грамматики, будут принимать одно имя файла в качестве аргумента и читать и анализировать ваши правила грамматики.

Чтобы расширить базовую функциональность, вы также должны расширять приемник по умолчанию для обработки соответствующих событий для токенов, встречающихся во время выполнения.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow