ANTLR
ANTLR 대상 / 언어 런타임
수색…
언어 지원
ANTLR은 많은 프로그래밍 언어에 대한 파서를 생성 할 수 있습니다.
- C # 대상
- Python 타겟
- 자바 스크립트 타겟
- 자바 타겟
기본적으로 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 런타임이 있어야합니다.
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 런타임 및 문법 파일에서 생성 된 파일과 결합되어 하나의 파일 이름을 인수로 받아 들여 문법 규칙을 읽고 구문 분석합니다.
기본 기능을 확장하려면 기본 리스너를 확장하여 런타임 중에 발생하는 관련 이벤트를 처리해야합니다.