在原始语法中,我有一个解析器规则定义为
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为检查 if kis typeAor typeB,然后建议差异自动完成。然而,在第一次提案之后,它涉及
typeA = {'class': 'typeA',
然后我的自动完成将不起作用。它只知道它在地图中,但不知道这张地图在 a 的右侧Property。这样我就无法检查kistypeA或typeB.
有什么帮助吗?
==================================================== =============
更新:添加更多代码片段
PropertyValue
: c=Constant
| u=UnreservedKeyword
;
Constant:
STRING_LITERAL | INTEGER | FLOAT | BOOLEAN | UUID | HEXNUMBER
;
==================================================== =============
更新:我发现我可以从参数中获取 AstTree 中的父对象model并遍历所有映射条目以检查class属性是否已显示以及Cident. 相当愚蠢但有效。