Java에서 컴파일러를 구축하기 위해 코드를 구문 분석하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/672577

문제

컴파일러를 작성해야합니다. Univ에서의 숙제입니다. 선생님은 코드가 좋은 API를 사용할 수 있다고 말했습니다. 그렇게하면 우리가 생성 할 JVM에 더 집중할 수 있습니다.

그렇습니다. Java를 생성하기 위해 Java에 컴파일러를 작성하겠습니다.

이것에 대한 좋은 API를 알고 있습니까? Regex를 사용해야합니까? 나는 보통 내 자신의 파서를 손으로 씁니다. 그러나이 시나리오에서는 권장하지 않습니다.

모든 도움이 감사하겠습니다.

도움이 되었습니까?

해결책

REGEX는 컴파일러에서 사용하는 것이 좋지만 토큰을 인식하는 데만 사용됩니다 (예 : 재귀 구조 없음).

컴파일러를 작성하는 고전적인 방법은 어휘 분석기 토큰을 인식하기 위해, a 구문 분석기 구조를 인식하기 위해 a 시맨틱 분석기 의미를 인식하기 위해, an 중간 코드 생성기, an 최적화, 그리고 마지막 a 대상 코드 생성기. 컴파일러를 쉽게 쓸 수 있도록 해당 단계 중 하나를 병합하거나 완전히 건너 뛸 수 있습니다.

이 프로세스를 돕기 위해 많은 도구가 개발되었습니다. Java의 경우 볼 수 있습니다

다른 팁

추천합니다 antlr, 주로 StringTemplate을 통한 출력 생성 기능 때문입니다.

더 나은 것은 그게 그것입니다 테렌스 파르의 책 마찬가지로 파서 생성기가있는 컴파일러를 작성하는 데 방향이 더 좋은 책 중 하나입니다.

그럼 당신은 가지고 있습니다 antlrworks 이를 통해 문법을 즉시 공부하고 디버깅 할 수 있습니다.

무엇보다도 Antlr Wiki + 문서, (내 취향에 충분히 포괄적이지는 않지만)는 초보자를 위해 시작하기에 좋은 곳입니다. 일주일 안에 컴파일러 쓰기에 대한 지식을 새로 고치는 데 도움이되었습니다.

살펴보십시오 Javacc, Java의 언어 파서. 사용하기가 매우 쉽고

클래식으로 이동 -Lex + YACC. Java에서는 철자가 있습니다 Jax 그리고 Javacc. Javacc는 심지어 일부를 가지고 있습니다 자바 문법 검사 준비.

메타 컴파일러와 같은 것을 사용하는 것이 좋습니다 antlr, 또는 간단합니다 파서 콤비네이터 도서관. 기능적 자바 a Parser Combinator API. 또한 있습니다 JPARSEC. 이 두 가지 모두 기반입니다 Haskell 용 Parsec 라이브러리.

JFLEX 스캐너 생성기입니다 수동, Parser Generator와 함께 작동하도록 설계되었습니다 .

JFLEX의 주요 디자인 목표 중 하나는 무료 Java Parser Generator Cup과 인터페이스를 쉽게 [sic]으로 만드는 것이 었습니다.

또한 갖는다 지원하다 ~을 위한 byacc/j, 이름에서 알 수 있듯이, Java 코드를 생성하기위한 버클리 YACC의 항구입니다.

나는 JFLEX 자체를 사용하고 그것을 좋아했습니다. Howeveer, 내가하고있는 프로젝트는 내가 파서를 손으로 썼을 정도로 간단했기 때문에 컵이나 byacc/j가 얼마나 좋은지 모르겠습니다.

선택은 아니지만 컴파일러 과정에서 SABLECC를 사용했습니다.

나는 편리함보다 청결에 더 중점을 둔 매우 부피가 크고 헤비급을 발견 한 것을 기억합니다 (운영자 우선 순위 나 아무것도 없습니다. 문법에서 그것을 말해야합니다).

선택이 있다면 다른 것을 사용하고 싶을 것입니다. YACC (C)과 행복 (Haskell의 경우)에 대한 나의 경험은 모두 즐거웠습니다.

Parser Combinators는 좋은 선택입니다. 인기있는 Java 구현은 JPARSEC입니다.

하드 코어로 가려면 약간의 http://llvm.org 혼합물에 :)

Beanshell 소스를 보는 것이 좋습니다. Java 용 컴파일러가 있으며 읽기가 매우 간단합니다.

http://java-source.net/open-source/parser-generator 그리고 http://catalog.compilertools.net/java.html 이를위한 도구 카탈로그를 포함합니다. stackoverflow 질문도 비교하십시오 정규 표현에 대한 대안.

파서 콤비네이터를 사용하십시오 JPARSEC. 거기 있습니다 사용 방법에 대한 좋은 비디오 자습서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top