IntelliJ+ANTLR(+kotlin) 개발 환경 보완
개요
호스트 언어에서 크게 벗어난 문법을 지원하고 싶다면, 해상도를 만들어야 한다.
JVM에서 실행되는 분석기 생성기 몇 개를 찾아봤는데 몇 개의 후보가 있지만 ANTLR이 가장 신뢰할 만한 것 같습니다.ANTLR의 특징은 다음과 같습니다.
항목 만들기
IntelliJ에서 새 Gradle 프로젝트를 만듭니다.
build.gradle 편집
build.다음 차이점을 gradle에 추가합니다.
mainClassName
는 응용 프로그램 플러그인의 입구점을 지정하는 속성입니다.kotlin을 대상으로 할 때 파일 이름의 끝에 Kt
를 추가합니다.group 'com.kazy'
version '1.0-SNAPSHOT'
buildscript {
ext.kotlin_version = '1.0.3'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
+ apply plugin: 'application'
+ apply plugin: 'antlr'
repositories {
mavenCentral()
}
+ mainClassName = "com.kazy.MainKt"
dependencies {
+ antlr 'org.antlr:antlr4:4.5.3'
+ compile "org.antlr:antlr4-runtime:4.5.3"
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.11'
}
구문 정의 파일에서 해상도 생성
환경을 만드는 것이 목적이기 때문에 문법 정의가 이용getting-started하는 것이다.
소개된 문법 정의를 직접 사용하면 자바 코드를 생성할 때 패키지를 지정하지 않아 불편하다
@header
. 그래서 패키지 이름을 사용합니다.작성된 구문 정의 파일은 src>antlr
아래에 지정된 패키지와 같은 이름의 디렉터리 차원 구조를 만들고 배치합니다.// Define a grammar called Hello
grammar Hello;
@header {
package your.package.name.generated;
}
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
여기까지 준비가 되면 자동으로 코드가 생성됩니다.
프로젝트 디렉터리
./gradlew generateGrammarSouce
또는 메뉴 모음View>Windows>Gradle
에서 메뉴를 꺼내서other 작업 내generateGrammarSouce
를 수행할 때build>generated-src>antlr
다음은 자동으로 해상도 코드를 생성합니다.생성된 해상도 실행
입구점을 만들어 생성된 코드를 실행해 보세요.
mainClassName = "com.kazy.MainKt"
일 경우,kotlin 디렉터리 아래에 com.kazy.Main.kt
라는 파일을 만듭니다.main의 실현은 다음과 같다.fun main(args: Array<String>) {
val text = "hello world"
val source = ANTLRInputStream(text)
val lexer = HelloLexer(source)
val tokenStream = CommonTokenStream(lexer)
val parser = HelloParser(tokenStream)
parser.r()
}
이 상태./gradlew run
또는 GUI에서 Main.kt를 오른쪽 단추로 눌러서 정상적으로 실행하고 끝날 때 동작이 정상적입니다.성공해도 아무것도 보이지 않아 재미가 부족하지만 텍스트를'Hello world'로 설정하면 Tokenizer가 인기가 많다는 것을 확인할 수 있다고 생각합니다.끝내다
이곳에 와서 환경을 정리하는 데 한나절이 걸렸다.
ANTLR의 커뮤니티는 커 보이지만 일본어 보도가 많지 않기 때문에 계속 개발할 수 있다면 조금씩 지식을 투고할 것이다.
Reference
이 문제에 관하여(IntelliJ+ANTLR(+kotlin) 개발 환경 보완), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazy/items/ad99142111bba2f0e708텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)