2011-09-22 3 views
3

사용자 지정 언어에 대한 ANTLR 문법을 사용하여 Visual Studio에서 언어 서비스를 개발하고 있습니다. 그러나 문법은 전 처리기 지시문을 처리하고 컴파일러의 효율성을 높이기 위해 C++ 코드로 채워집니다.여러 언어를 대상으로 한 ANTLR 문법을 사용하는 방법이 있습니까?

Visual Studio 용 언어 서비스는 C++로 작성하기가 쉽지 않으므로 동일한 언어에 대해 C# 파서가 필요합니다. 즉, language=CSharp2을 설정하고 모든 C++ 코드를 문법에서 제거해야한다는 의미입니다.

문법에서 모든 C++ 코드를 제거하고 { $channel = HIDDEN; }과 같은 간단한 문을 { $channel = TokenChannels.Hidden; }으로 변환하는 약간의 수출업자를 작성하려고합니다.

더 똑똑한 방법이 있습니까? 템플릿을 통해, 또는 두 가지 언어를 문법에 포함시키기위한 작은 트릭을 통해?

+2

C++을 관리되는 C++로 처리/변환 할 수 없습니까? 그것은 그것 주위의 C# 세계와 호환되어야합니다. –

+0

ANTLR은 의미 론적 표현을위한 자체 추상 프로그래밍 언어를 정의해야하며 그렇지 않습니다. 진행중인 프로젝트에서 내가 선택한 것은 직접 사용할 수있는 Python을 대상으로하거나 Jython (테스트 된) 또는 Cython을 사용하는 다른 언어를 사용하여 Java 내에서 사용하는 것입니다. – Apalala

답변

0

나는 AST를 사용하여 두 단계로 문제를 해결할 수 있습니다. 파서를 대상 언어 중립 문법 (AST를 생성)에 넣고 antlr 도구에 -target 옵션을 사용하여 선택한 대상 언어 (C++, C#, Java 등)로 파서를 생성합니다.

그런 다음 대상 언어로 AST 워커를 구현하십시오. 이것의 이점은 하나의 AST 보행기가 완성되면 그것을 복사하고 다른 목표 언어에 대한 동작을 변경한다는 것입니다.

관련 문제