2016-04-21 3 views
1

Я хотел бы создать терминал, который несколько можно сопоставить с ID, но не полностью. Хотя идентификаторопределить терминал, который является подмножеством идентификатора в xtext

terminal ID   : '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*; 

терминал Я хотел бы определить это

terminal TYPE: (('a'..'z'|'A'..'Z')?('a'..'z'|'A'..'Z'|'_'|'0'..'9')*)? 

потому что TYPE может соответствовать ID я получаю RULE_ID ошибки, что я могу сделать в этом случае?

______EDIT__________ 

Domainmodel : 
    (elements+=XType)*; 

terminal TYPE: ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 

MyID: 
    TYPE | ID 
; 

XType: 
    DataType | Entity; 

DataType: 
    'datatype' name=MyID; 

Entity: 
    'entity' name=MyID ('extends' superType=[Entity])? '{' 
     (features+=Feature)* 
    '}'; 

Feature: 
    (many?='many')? name=MyID ':' type=[XType]; 

Модель (основание на примере блога)

datatype String 

entity Blog { 
    title: String 
    title2: String 
    many posts: Post 
    many Posts: Post 
} 

entity HasAuthor { 
    author: String 
} 

entity Post extends HasAuthor { 
    title: String 
    content: String 
    many comments: Comment 
} 

entity Comment extends HasAuthor { 
    content: String 
} 

ответ

1

Вы можете ввести правило Тип данных

MyID: ID | TYPE; 

и конвертер значение для MyID и использовать его в тех местах, которые вы использовали ID

Или вы забудете тип и выполните проверку на ограниченный диапазон внутри валидатора

Domainmodel : 
    (elements+=XType)*; 

terminal TYPE: ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 

MyID: 
    TYPE | ID 
; 

XType: 
    DataType | Entity; 

DataType: 
    'datatype' name=MyID; 

Entity: 
    'entity' name=MyID ('extends' superType=[Entity|MyID])? '{' 
     (features+=Feature)* 
    '}'; 

Feature: 
    (many?='many')? name=MyID ':' type=[XType|MyID]; 
+0

Я не уверен, что вы имеете в виде Или вы забыли тип и сделать проверку для ограниченного диапазона внутри валидатора – Quantico

+0

просто один терминал ОЮЛ называется идентификатор, который объединяет ваш тип и идентификатор, а затем сделать ограничение моего проверка атрибутов, присваиваемых идентификатору или имеющих правило типа данных. ТИП: Идентификатор с IValueConverter, который генерирует значения ValueConverterExceptions при неудачных входах. –

+0

взгляните на валидатор xtext pregenerates, у него есть правило для имен приветствий, начинающихся с буквы верхнего регистра, хотя идентификатор разрешить строчные буквы, а также –