2017-09-06 4 views
0

post about the antlr simple example은 자바를 만드는 방법과 우리에게 문법을 보여줍니다.다국어 생성을위한 Antlr

그러나이 방법은 Exp.g 소스에서 문법과 Java 소스 코드를 혼합합니다.

내 질문은 하나의 문법 파일을 여러 Java, 스칼라, C++ 등의 생성기로 사용할 수 있도록 문법 파일을 대상 언어에서 분리 할 수 ​​있습니까?

+0

일반적으로 .g 문법은 대상 언어와 실제로 분리되어 있으며, 이는 Exp.g. 예를 들어 C#의 대상은 https://github.com/tunnelvisionlabs/antlr4cs 또는 C++입니다. http://www.soft-gems.net/index.php/tools/49-the-antlr4-c-target -여기에 . Java를 넘어 목표를 작성하는 것은 ANTLR 프로젝트 자체를 넘어서는 것이며, 나는 –

+0

@ SimonMourier라고 믿는다. 나는이 질문을 잘못 해석했다고 생각한다. Exp.g 참조는 Java와 섞여 있습니다. 그것, 나는 피하려고 노력하고있다. – NWS

답변

1

주로 대상 코드가 문법에 사용되는 이유에 따라 달라집니다. 발견 된 토큰 (예 : 심볼 테이블 또는 대체 트리 표현 만들기)을 사용하여 작업을 수행하는 작업 코드는 실제로 이러한 원시 코드를 제거하고 나중에 구문 분석 트리 워커 또는 방문자를 사용하여 처리하는 데 아무런 문제가되지 않습니다.

그러나 술어는 다릅니다. 이들은 파서를 안내하고 원시 코드가 필요합니다. 네이티브 코드를 생성 된 파서가 파생 된 기본 클래스로 이동하는 것입니다. 그런 다음이 기본 클래스를 대상 언어로 다시 작성하고 문법에 원시 코드가 거의없는 경우 (원시 코드를 호출하는 단일 함수 호출 제외).

이 방법은 추가 라이브러리 참조가 필요하지 않으며 (C/C++에 #include, 다른 언어로 임포트) 원시 코드가 다중 대상을 사용하지 못하도록하는 이점이 있습니다.