我有这样的语法规则:
type
: '[' type ']'
| '[' type ':' type ']'
| type 'throws'? arrow_operator type
| type 'rethrows' arrow_operator type
| type_identifier
| tuple_type
| type '?'
| type '!'
| protocol_composition_type
| type '.' 'Type'
| type '.' 'Protocol'
;
我需要区分解析器应用程序中的规则。我知道我可以标记每个备选方案,但我不想修改语法,因为我使用语法v4存储库来保持语法的最新状态。
还有其他易于使用的选项吗?或者我应该承认,如果不修改语法,我就无法制作应用程序?
当然可以,但如果没有其他标签,就更麻烦了。在访问者或听众方法中,您可以通过以下方式区分它们:
if (context.arrow_operator() != null)
{
if (context.GetChild(1).GetText() == "rethrows")
{
// rule 4
}
else
{
// rule 3
}
}
else if (context.type_identifier() != null)
{
// rule 5
}
else
...
else if (context.type().Length == 2)
{
// rule 2
}
else
{
...
}