2013-10-27 1 views
10

Antlr3 문법 파일이있는 C# 솔루션이 있으며 Anltr4로 업그레이드하려고합니다. 문법은 쉬운 부분이었습니다 (크기가 더 좋았고 크기의 1/3이되었습니다!). 파서를 생성하는 것은 까다로운 부분으로 판명되었습니다.Antlr4 생성 된 파일의 대상 및 출력 경로

이전 솔루션에서는 문법 파일이 변경되었을 때 AntlrWorks를 실행하여 lexer 및 parser .cs 파일을 업데이트했습니다. 렉서와 파서는 문법과 같은 프로젝트에 직접 포함되었으므로 파서 주변의 프레임 워크는이를 직접 사용할 수 있습니다.

C#의 Antlr4 대상에서 (적어도 기본적으로) 생성 된 Parser C# 클래스의 출력 경로가 중간 디렉터리에 있음을 확인했습니다. obj \ Debug. 즉, 동일한 프로젝트에서 파서를 직접 사용할 수 없습니다. 생성 된 소스를 내 sln에서 사용할 수있게하려면 출력 경로를 변경해야합니까? 내 슬론에서 그걸 원하지 않니?

구문 분석기 생성을 위해 별도의 프로젝트를 만들려고했습니다. 즉, 문법 파일 만 포함 된 프로젝트입니다. Antlr4 타겟을 사용하여이 프로젝트를 빌드하면 파서 클래스가 필요한 프로젝트에서 결과 어셈블리를 참조 할 수 있습니다. 그러나이 프로젝트가 솔루션에 포함되어 있다면로드 된 프로젝트의 소스 파일에 인텔리 센스를 기반으로하기 때문에 Visual Studio에서 인텔리 센스를 얻지 못하므로 아직 유용하지 않습니다. 필자가 제대로 작동하도록하는 유일한 방법은 파서 프로젝트를 빌드 한 다음 다른 프로젝트에서 프로젝트가 아닌 어셈블리 파일로 참조하도록하는 것입니다.

편집 :

ANTLR 관심 목록에보고 후 나는 인텔리의 문제가 Resharpers 오류가있을 수 있음을 나타내는이 스레드를 발견했다. 이 경우, 내 질문에 오히려 어떻게 Antlr4 및 Resharper 내 솔루션을 사용하여 유지하는 것입니다? https://groups.google.com/forum/#!topic/antlr-discussion/QSuJXphaBDg

답변

4

ReSharper에 알려진 버그가 있습니다. ANTLR 3 및 ANTLR 4 C# 빌드 통합은 안정적이며 Microsoft가 다른 언어 및 코드 생성 작업과 함께 사용하는 오래된 패턴을 사용합니다. 옵션은 다음과 같습니다

  1. 이 기능에 대한 지원의 부족을 해결하기 위해 ReSharper에서 저자를 가져옵니다 ReSharper에서
  2. 사용 정지, 또는
  3. 수정 ReSharper에서의 제한을 해결하기 위해 ANTLR 4 대상, 소개되는 빌드에 다른 문제가 있거나 사용하기에 적합하지 않을 수 있습니다.

옵션 1은 분명히 가장 비용이 적게 들며, 프로젝트에 대한 신뢰할 수있는 장기 지원을 제공 할 가능성이 큽니다.

+1

옵션 0은 잘못된 오류 하이라이트를 표시하고 인텔리 센스가 없음을 받아들입니다. VS는 R # 없이는 실제로 사용할 수 없으므로 1) 슬프게도 옵션이 아닙니다. 프로젝트별로 R #을 끌 수 있다면 좋겠다. R # 포럼에 가져 갔고 JetBrains에서도 지원 문제를 제기 할 생각이다. Antlr 대상의 출력을 중간 dir이 아닌 원본 dir로 라우팅 할 수 있습니까? 윌은 Antlr4 타겟을 변경해야하거나, 타겟에 이미 속성이 있습니다. –

12

Resharper 확장 프로그램을 찾았습니다 : ReSharper.ExternalCode.

팁 : Anthr : Resharper -> 코드 검사 -> 외부 코드에서 obj\Debug을 추가하고 솔루션을 다시로드하십시오.

저에게 도움이됩니다.

+0

정말 문제를 해결합니다 !! – 101V

+0

완벽하게 작동합니다. – sdds

+0

2014 년 3 월 이후 업데이트가 없습니다. 포기 소프트웨어? 어쨌든 R # 8.2를 지원합니다. 나는 10.0.2 ...에있다. – joce

10

Antlr 4와 Visual Studio의 장점을 손쉽게 얻을 수있는 방법이 있습니다. 별도의 문법 프로젝트와 구현 프로젝트를 제대로 수행하고 있지만 두 단계가 누락되었습니다.

은 Visual Studio에서

  • 을 작업 인텔리를 얻기 위해 다음 단계를 수행 도구로 이동 -> 확장 및 업데이트와 샘 하웰에 의해 "ANTLR 언어 지원"에 대한 온라인 섹션을 검색 할 수 있습니다.
    • 이 몇 가지 않습니다 : 결합 된 문법에 대한
      • 을 추가 템플릿.
      • 구문 강조 표시를 추가합니다.
      • 구문 분석기를 생성하기 위해 문법에 대한 MSBuild 대상을 추가합니다.
        • 솔루션
          • 문법 프로젝트
            • ANTLR 4 결합 문법
          • 구현 프로젝트
              을이 같은 프로젝트 구조를 설정 솔루션에서
        • ,생성 된 파일에 대한 링크에 대한
        • 폴더
        • 리스너 구현 클래스
  • 쓰기와 문법을 컴파일합니다.
  • 생성 된 파일에 대한 링크가있는 폴더에서 폴더를 마우스 오른쪽 단추로 클릭하고 추가 -> 기존 항목
  • 찾아보기 문법 Project \ obj \ Debug로 이동하여 생성 된 모든 파서 파일을 선택하십시오.
  • 다음 단계는 중요합니다. 추가 버튼에는 작은 드롭 다운 화살표가 있습니다. 드롭 다운 화살표를 클릭하고 "링크로 추가"를 클릭하십시오.
    • 이렇게하면 직접 복사 대신 심볼 링크를 사용하여 생성 된 파일을 구현 프로젝트에 추가합니다.
    • 나중에 문법을 변경해야 할 경우 파서 파일을 제거하고 다시 추가하지 않아도된다는 이점이 추가됩니다.
  • Intellisense는 생성 된 파서 클래스에 대해 이제 작동해야하며 은 ReSharper를 비활성화해야 할 필요가 없습니다.