2014-04-19 2 views
0

Xtext를 사용하여 NuSMV 언어 (모델 검사 언어) 용 eclipse 플러그인을 구현해야하는 소규모 학술 과제를 수행하고 있습니다. xtext 문법이 제공되었습니다 (사소한 버그가 있음). Xtext 프로젝트를 만들고 "NuSMV"라는 언어 이름과 "* .smv"확장명을 가진 "smv.project"라고했습니다. 제공된 Xtext 문법을 smv.project/src/NuSMV.xtext로 생성하고, 생성 된 이슈를 생성하고, 런타임 이클립스를 만들었습니다. 사소한 버그 (제 생각에는 문법에서 유래 한 것)를 제외하고는 정상적으로 작동합니다.구문 Xtext에 내 DSL 색칠

내 다음 단계는 내 DSL의 기본 색상을 변경하는 것입니다. 당연히, 모든 사용자는 플러그인을 사용할 때 이클립스 메뉴에서 자신을 위해이를 수행 할 수 있지만 변경할 기본 색상을 지정합니다. 구문 색칠에 대한 Xtext 설명서를 읽었습니다. 그것은 짧았고 많은 용어를 이해하지 못했습니다. 내가 이해 한 것은 Xtext, Lexical 및 Semantic에서 2 가지 종류의 구문 색칠이 있다는 것입니다. 나는 각자의 의미를 이해하지 못했지만 어휘 적 색채가 더 단순 해 보였기 때문에 나갔다. 설명서에 인터페이스 IHighlightingConfiguration을 구현해야한다고 나와 있습니다. DefaultHighlightingConfiguration이라는 구현 예제를 보여 줬습니다 (전체 소스는 여기 https://github.com/eclipse/xtext/blob/master/plugins/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/syntaxcoloring/DefaultHighlightingConfiguration.java에서 볼 수 있습니다). 이 구현을 내 프로젝트의 smv.project.ui/src/smv.project.ui.editor.syntaxcoloring으로 coppied했습니다. 물론 파일의 시작 부분에서 "패키지"행을 변경했습니다. 차이점을 확인하기 위해 모든 빨간색 값을 255로 변경했습니다. 나는 이클립스를 다시 생성하고 런타임 이클립스를 만들었으며 * .smv 파일을 만들었지 만 색상은 동일했다.

내 생각 엔 일부 변수 또는 구성 클래스에서 새 클래스를 설정해야한다는 것이 었습니다 ... 예제 저장소에서 "DefaultHighlightingConfiguration"을 검색하고 XtextProposalProvider.java 파일 (전체 소스 https://github.com/eclipse/xtext/blob/87a6c7dc25074ca4ff28429c059e728ef420b926/plugins/org.eclipse.xtext.xtext.ui/src/org/eclipse/xtext/ui/contentassist/XtextProposalProvider.java) 235 행 - getKeywordDisplayString()을 재정의했습니다. 그래서 난 내 저장소에 이미 존재하는 NuSMVProposalProvider.java에 가서 같은 라인을 추가하는 시도했다 :

/* 
* generated by Xtext 
*/ 
package smv.project.ui.contentassist 

import smv.project.ui.contentassist.AbstractNuSMVProposalProvider 
import javax.inject.Inject 
import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration 
import org.eclipse.jface.viewers.StyledString 
import org.eclipse.xtext.Keyword 

/** 
* see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant 
*/ 
class NuSMVProposalProvider extends AbstractNuSMVProposalProvider { 

    @Inject 
    private DefaultHighlightingConfiguration defaultLexicalHighlightingConfiguration; 

    @Override 
    protected StyledString getKeywordDisplayString(Keyword keyword) { 
     return stylerFactory.createFromXtextStyle(keyword.getValue(), 
       defaultLexicalHighlightingConfiguration.keywordTextStyle()); 
    } 

} 

그러나, 다음 오류 : 여기

@Override 
protected StyledString getKeywordDisplayString(Keyword keyword) { 
    return stylerFactory.createFromXtextStyle(keyword.getValue(), 
      defaultLexicalHighlightingConfiguration.keywordTextStyle()); 
} 

을 내 전체 NuSMVProposalProvider.xtend입니다 등장 :

  1. "주석 @Override는이 위치에서 허용되지 않습니다."
  2. "외부 입력"키워드 'expecting') '
  3. "일치하지 않는 입력'{ 'expecting'=> '" 처음 3 줄에 각각.

내 질문은 :

정확히 내가 IHighlightingConfiguration를 구현하는 내 클래스와 어떻게해야
  1. ?
  2. 어휘 및 시맨틱 하이라이팅이란 무엇입니까?
  3. 구문 색을 작동시키는 데 알아야 할 다른 것이 있습니까?

감사합니다. :) 차이 티

+0

NuSMVProposalProvider.java 파일의 잘못된 위치에 행을 추가 한 것 같습니다. 더 많은 파일을 보여주세요. –

+0

답장을 보내 주셔서 감사합니다! 질문에 전체 파일을 추가했습니다 (편집 됨). – chainet

+0

Xtend 파일에 Java 코드를 쓸 수 없습니다. 올바른 구문은 입니다. getKeywordDisplayString (키워드 키워드) {..} –

답변

0

NuSMVProposalProvider가 길은 아니 었습니다. 코드를 전혀 추가 할 필요가 없었습니다. 내가 찾고 있던 것은 다음 줄을 NuSMVUiModule에 추가하는 것이 었습니다.java :

public Class<? extends IHighlightingConfiguration> bindIHighlightingConfiguration() { 
    return DefaultHighlightingConfiguration.class; 
} 

의견을 보내 주신 모든 분들께 감사드립니다. Chai