在原始语法中,我有一个定义为
的解析器规则Property: k=Cident '=' (simple=PropertyValue | map=MapLiteral);
我有两个不同的属性A
和B
。它们在地图中具有不同的属性。
例如:
typeA = {'class': 'typeA', 'upper_bound': 50};
typeB = {'class': 'typeB', 'possible_value': 'int'};
typeB
不会有upper_bound
属性。
如果我覆盖completeProperty_Map
,我可以将model
投放到Property
以检查k
是typeA
还是typeB
,然后提出差异自动完成。但是,在第一个提案之后,它来到了
typeA = {'class': 'typeA',
然后我的自动完成功能无效。它只知道它在地图中,但不知道这张地图位于Property
的右侧。这样我无法检查k
是typeA
还是typeB
。
任何帮助?
=============================================== ===============
更新:添加更多代码段
PropertyValue
: c=Constant
| u=UnreservedKeyword
;
Constant:
STRING_LITERAL | INTEGER | FLOAT | BOOLEAN | UUID | HEXNUMBER
;
=============================================== ===============
更新:
我发现我可以从参数model
中获取AstTree中的父对象,并遍历所有映射条目以检查class
属性是否显示以及Cident
的值。相当愚蠢但有效。