我有以下语法,但我想对此进行一些验证。如果"播放器"中有重复的名称,我想犯一个错误列表。
格拉默:
Football:
'Club' name=STRING playerList=PlayerList
footballObjects+=FootballObject
;
FootballObject:
Player | Coach
;
PlayerList:
players+=[Player] ( players+=[Player] )*
;
Player:
'Player' name=ID
;
我尝试了以下内容:
@Check
def checkGreetingStartsWithCapital(Football model) {
val names = newHashSet
for (g : model.playersList.players) {
if(!names.add(g.name))
error("duplicate" , g, FOOTBALLPACKAGE.Literals.FOOTBALL__PLAYERS_LIST)
}
}
但这不起作用。有什么想法吗?
答案 0 :(得分:2)
最简单的方法是通过调用error
来标记列表条目,而不是在引用的播放器上,而是在playersList
本身上,并调用带有索引的error
方法。 e.g。
error("bad", playersList, MyDslPackage.Literals.PLAYERS_LIST__PLAYERS, index)