定义一个终端,它是 xtext 中 ID 的子集
define a terminal that is a subset of ID in xtext
我想创建一个可以与ID匹配但不完全匹配的终端。
ID 为
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
}
你可以引入数据类型规则
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];
我想创建一个可以与ID匹配但不完全匹配的终端。 ID 为
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
}
你可以引入数据类型规则
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];