#antlr #antlr4 #code-translation
#antlr #antlr4 #код-перевод
Вопрос:
Я создавал прослушиватель для перевода всех вызовов методов Java A.Foo(аргументы) в A.Bar(аргументы). Мне показалось, что правило:
expression '.' explicitGenericInvocation
Это наиболее подходящее правило для прослушивания. Однако после визуального осмотра дерева я понял, что все вызовы методов Java распознаются как правило
expression '(' expressionList? ')'
в то время как термин выражения дополнительно сопоставляется с
expression '.' Identifier
Кажется, что правило выражения все время переопределяет правило explicitGenericInvocation . Это предназначено или есть недостаток в грамматике Java? Если это предназначено, то какова правильная интерпретация правила explicitGenericInvocation?
Ответ №1:
explicitGenericInvocation должен начинаться с nonWildcardTypeArguments, который <…>. a.Foo(аргументы) поэтому соответствует общему правилу, а не специализированному для общих типов.