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입니다 등장 :
- "주석 @Override는이 위치에서 허용되지 않습니다."
- "외부 입력"키워드 'expecting') '
- "일치하지 않는 입력'{ 'expecting'=> '" 처음 3 줄에 각각.
내 질문은 :
정확히 내가 IHighlightingConfiguration를 구현하는 내 클래스와 어떻게해야- ?
- 어휘 및 시맨틱 하이라이팅이란 무엇입니까?
- 구문 색을 작동시키는 데 알아야 할 다른 것이 있습니까?
감사합니다. :) 차이 티
NuSMVProposalProvider.java 파일의 잘못된 위치에 행을 추가 한 것 같습니다. 더 많은 파일을 보여주세요. –
답장을 보내 주셔서 감사합니다! 질문에 전체 파일을 추가했습니다 (편집 됨). – chainet
Xtend 파일에 Java 코드를 쓸 수 없습니다. 올바른 구문은 입니다. getKeywordDisplayString (키워드 키워드) {..} –