수색…


언어 지원

ANTLR은 많은 프로그래밍 언어에 대한 파서를 생성 할 수 있습니다.

  1. C # 대상
  2. Python 타겟
  3. 자바 스크립트 타겟
  4. 자바 타겟

기본적으로 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. 파이썬 2 런타임
  3. 파이썬 3 런타임

ANTLR 런타임 라이브러리에 대한 전체 지침 및 정보

파이썬 파서 설정

문법 .g4 파일을 ANTLR.jar과 함께 실행 한 후에는 다음과 같이 여러 파일을 생성해야합니다.

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

파이썬 프로젝트에서 이들을 사용하려면 파이썬 런타임을 작업 공간에 포함 시키십시오. 따라서 개발중인 모든 응용 프로그램이 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