2011-04-14 2 views
3

전 완전히 XText를 사용합니다.XText : 맞춤 단말기 정의 사용

당신은 당신이 두 번째 문법을 지정하고 말 그대로 선언 정의를 사용할 수 XText 사용하여 문법을 정의 할 때 here :

grammar org.eclipse.xtext.example.Domainmodel with org.eclipse.xtext.common.Terminals 
각 문법 고유 이름을 가지고 Xtext에서

하는 등의 공용 Java 클래스 은 파일의 위치를 ​​Java 클래스 경로 내에 반영해야합니다. 의 경우 문법 파일은 /org/eclipse/xtext/example/Domainmodel.xtext 에 있으며 따라서 문법 이름은 org.eclipse.xtext.example.Domainmodel입니다. 그 진술 ( 와 org.eclipse.xtext.common.Terminals) 상태의 두 번째 부분이 문법은 재사용 지정된 문법에서 재정 규칙 것을. org.eclipse.xtext.common.Terminals은 Xtext 와 함께 제공되는 라이브러리 문법 이며, 가장 일반적인 터미널 규칙을 미리 정의

내가 XText 플러그인을 개발하고 있어요 그리고 난 내 자신의 터미널을 정의하고 싶습니다 분리 된 파일의 기호. 가능한가? 내가 어떻게 할 수 있니?

새로운 Xtext 파일을 만들고 org.eclipse.xtext.common.Terminals 뒤에 추가하고 광산을 추가하려고했지만 두 솔루션 모두 컴파일되지 않았습니다.

감사합니다.

편집

내가 같은 프로젝트에서 두 xtext 파일, 문법에 대한 하나 내가 mwe2 파일을 실행 다음과 같은 예외 얻을 문법의 터미널 하나를 사용하는 경우 :

자바. lang.IllegalStateException : '/org/xvr/language/sh/ShaderDsl.xtext 클래스 경로' 를 분석 문제 [XtextLinkingDiagnostic : 널 (null) : 1 문법 'org.xvr.language.sh에 대한 참조를 확인할 수 없습니다. ShTerm inal '. XtextLinkingDiagnostic : null : 9 에 대한 참조를 확인할 수 없습니다. AbstractRule'ID '., TransformationDiagnostic : NULL (19 는 데이터 유형 HIGH_PRECISION 를 만들 수 없다 : TransformationDiagnostic : NULL 17 는 데이터 유형 PRECISION 를 생성 할 수 없습니다 (ErrorCode가 : NoSuchTypeAvailable) TransformationDiagnostic : NULL을 14 는 데이터 유형 불변 식 (NoSuchTypeAvailable ErrorCode가)를 생성 할 수 없습니다 ErrorCode가 : NoSuchTypeAvailable), TransformationDiagnostic : 널 (null) : 20 이 데이터 형식을 MEDIUM_PRECISION (ErrorCode를 만들 수 없습니다 : NoSuchTypeAvailable)를 TransformationDiagnostic : 널 (null) : 21 는 데이터 형식 LOW_PRECISION 를 만들 수 없습니다 (ErrorCode가 : NoSuchTypeAvailable)]

두 xtext 파일은 다음과 같습니다

문법

grammar org.xvr.language.sh.ShaderDsl with org.xvr.language.sh.ShTerminal //org.eclipse.xtext.common.Terminals 

generate shaderDsl "http://www.xvr.org/language/sh/ShaderDsl" 
.... 

와 문법의 터미널

grammar org.xvr.language.sh.ShTerminals with org.eclipse.xtext.common.Terminals 
generate shTerminals "http://www.xvr.org/language/sh/ShTerminals" 

terminal Test : 'test'; 
+0

나는 그것을 만들었고 생성 된 줄에서 "생성 된 패키지 'myTerminals'이 비어 있지 않을 수도 있습니다."라는 오류가 발생했습니다. 어떻게 그걸 피 했니? – mvmn

답변

5

당신은 많은 옵션 (모두가 온라인 도움말에 설명되어 있음) :

  1. 터미널 규칙을 현재 작업하고있는 문법대로 정의하십시오.
  2. common.Terminals로 수행 한 것과 비슷한 터미널 기호에 대한 새로운 전용 문법을 작성하십시오. 공통 단자 대신에 하나를 사용하십시오.
  3. 터미널 기호에 대한 새로운 전용 문법을 작성하고 해당 문법의 common.Terminals를 재사용하고 실제 언어로 사용자 고유의 터미널 문법을 사용하십시오.

사용자 언어 (옵션 1)로 바꿀 터미널을 무시하거나 동일한 터미널 세트 (옵션 3)로 여러 언어를 정의하려는 경우, 또는 두 옵션을 모두 결합하십시오.

grammar org.mycompany.MyTerminals with org.eclipse.xtext.common.Terminals 

terminal ID: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*; 
terminal SL_COMMENT: '--' !('\n'|'\r')* ('\r'? '\n')?; 

== 

grammar org.mycompany.MyLanguage with org.mycompany.MyTerminals 

MyModel: name=ID other=ANOTHER; 

terminal ANOTHER: '/#' -> '#/' 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다! 이해가 안되었습니다 : 두 개의 다른 xtext 파일 중 하나는 문법을 정의하고 다른 하나는 문법의 터미널을 동일한 xtext 프로젝트에 포함시킬 수 있습니까? 세 번째 솔루션을 시도 ... 같은 프로젝트에서 두 xtext 파일을 예외 (편집 참조) 얻을. – hara

+0

문법 파일 이름이 Java 클래스의 규칙을 따라야합니다. 즉, org.xvr.language.sh.ShTerminal은 org.xvr.language.sh 패키지의 java 소스 폴더에 있어야하며 파일 이름은 ShTerminal.xtext 여야합니다. –

+0

예. 파일은 org.xvr.language.sh 패키지에 있으며 문법은 ShTerminals.xtext입니다. 문제가 될 수 있습니까? – hara