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