1

私は次のようなことをするXtext文法を持っています:

Model:
  (names += Name)*
  (rules += Rule)*
;

Rule:
  'rule' ruleName = ID;

Name:
  name = ID+;

terminal ID:
  ('a'..'z')+;

ruleName名前ブロックで宣言されていることを検証したいと思います。JavaValidator次のようにルール名自体にアクセスできます。

@Check
public void checkName(Rule rule) {
  rule.getName(); // how to compare to names without access to Model object?
}

namesしかし、からフィールドにアクセスできませんModel。どうすればいいJavaValidatorですか?

4

2 に答える 2

2

あるいは(Model)rule.eContainer()、モデルを提供する必要があります

于 2011-12-06T19:52:16.230 に答える
0

Nameターミナルとして定義することが必須ではない場合は、相互参照の使用を検討してください。

grammar org.example.YourDSL
  with org.eclipse.xtext.common.Terminals

generate secrets "http://www.example.org/yourdsl"

Model:
  (names += Name)*
  (rules += Rule)*
;

Name:
  name=ID; // name of the property is important!
Rule:
  'rule' name=[Name];

// Override ID from org.eclipse.xtext.common.Terminals
terminal ID:
  ('a'..'z')+;
于 2011-12-05T15:28:34.587 に答える