0

在原始语法中,我有一个解析器规则定义为

Property: k=Cident '=' (simple=PropertyValue | map=MapLiteral);

我有两个不同的属性AB. 它们在地图中具有不同的属性。例如:

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。这样我就无法检查kistypeAtypeB.

有什么帮助吗?

==================================================== =============

更新:添加更多代码片段

PropertyValue
  : c=Constant
  | u=UnreservedKeyword
;

Constant:
  STRING_LITERAL | INTEGER | FLOAT | BOOLEAN | UUID | HEXNUMBER
;

==================================================== =============

更新:我发现我可以从参数中获取 AstTree 中的父对象model并遍历所有映射条目以检查class属性是否已显示以及Cident. 相当愚蠢但有效。

4

0 回答 0