[c#] Visual Studio에서 사용할 새 언어를 만드는 방법

새 템플릿 언어를 작성하고 Visual Studio에서 “지원”하기를 원합니다. 내가 알아야 할 것은 :

  1. 새 언어를 어떻게 구문 분석합니까?
    새 템플릿 언어로 된 일부 코드가 주어지면 어떻게 HTML로 번역합니까? 지금은 정규식을 사용하여 토큰을 토큰별로 구문 분석하고 있지만 언어가 더 복잡해지고 오류 검사가 없기 때문에 이것이 잘 확장 될 것이라고 생각하지 않습니다. ANTLR에 대해 들어 봤지만 사용하지 않았습니다. 이것이이 작업에 적합한 도구일까요, 아니면 더 간단한 것이 있을까요? 이상적으로는 다른 언어처럼 가능한 한 많은 정보 (줄 번호, 오류 유형)와 함께 구문 오류를 오류 창에 보내고 싶습니다.
  2. Visual Studio 용 새 파일 형식을 만들려면 어떻게하나요?
  3. 구문 강조는 어떻게 얻습니까?
    1 단계에서 만든 것과 동일한 파서를 사용할 수 있습니까? 아니면 완전히 다른 것입니까?
  4. Intellisense는 어떻게 얻습니까?

파서를 C #으로 작성하고 싶습니다.



답변

Visual Studio와의 통합 작업을 이미 수행 한 다른 언어를 살펴 보겠습니다. 좋은 예는 Boo입니다. 언어 및 Visual Studio 통합은 오픈 소스입니다. 따라서 그들이 무엇을해야했는지 정확히 볼 수 있습니다.

VS2010 용 Boo 구문 강조에는 홈페이지에 몇 가지 권장 링크가 포함되어 있으므로 쉽게 참조 할 수 있습니다.


답변

Visual Studio 측면과 관련하여 필요한 것은 “언어 서비스”이며, 이는 주어진 파일 확장명 / 형식에 대해 색상 지정, 인텔리 젠스 등을 처리하는 엔터티입니다.

소개 는이 문서를 참조
하고 코드 샘플 은 여기를 참조하십시오.

파싱과 관련하여 많은 기술이 있으며 의견이나 조언을 제공하지 않을 것입니다.

제 생각에는 Visual Studio의 이전 버전보다 VS2010에서 이러한 종류의 확장을 제공하는 것이 훨씬 더 간단하지만 상당한 양의 작업이 관련되어 있습니다.

또한보십시오

Visual Studio 2010 확장 성, MPF 및 언어 서비스


답변

이 기사를 기반으로 VS Language Service를 작성했습니다.
http://www.codeproject.com/KB/recipes/VSLanguageService.aspx

문법에 대한 기본 핸들이 있으면 나쁘지 않았습니다.


답변

찾고있는 대부분의 기능을 보여주는 샘플이 VS SDK에 있습니다.


답변

나는 자신의 언어로 VS를 사용하고 있었고 구문 강조가 절실히 필요했습니다 . 이 튜토리얼을 기반으로 내 것을 만들었습니다 .https : //mattduffield.wordpress.com/2012/07/31/writing-a-brightscript-syntax-highlight-extension-for-visual-studio-2010/

튜토리얼이 VS2010에 있다는 것을 알고 있습니다. 나는 딸꾹질이 없거나 아주 작은 VS2012에서 내 것을 만들었습니다. (VS2013에서도 작업) 최근에 VS2015로 변경하여 문제없이 솔루션을 편집 할 수 있습니다.


답변

Visual Studio 2013 SDK에 대한 매우 유용한 최신 샘플 모음을 찾았습니다.
http://blogs.msdn.com/b/vsx/archive/2014/05/30/vs-2013-sdk-samples-released.aspx

유망하게 들리는 OokLanguage의 최신 버전도 포함되어 있습니다.

우리는 ANTLR 4를 사용하여 매력처럼 작동하고 C # 코드와 직접 상호 작용할 수있는 언어를 구문 분석했습니다. 완전히 추천 할 수 있습니다.


답변

다른 답변에서 언급했듯이 가장 흥미로운 코드 샘플은 Visual Studio의 최신 버전 (작성 당시 2017)에 대한 Ook 언어 확장 입니다.

VS 2015의 경우 VS2015 분기샘플을 참조하세요 .

2015 이상용 SDK를 설치하려면 VS 설정을 다시 실행해야합니다. 2015 년에는 “Visual Studio 확장 성 도구 업데이트 3″이라고합니다.