Ответ 1
Генератор парсеров ANTLR 4 может объединять группы переходов для формирования единого "набора переходов" в некоторых случаях, уменьшая накладные расходы на статическую и динамическую память, а также улучшая производительность во время выполнения. Это может произойти только в том случае, если все альтернативы блока содержат один элемент или набор. Например, следующий код позволяет объединить INT
и FLOAT
в один переход:
// example 1
number
: INT
| FLOAT
;
// example 2, elements grouped into a set
primary
: '(' expression ')'
| (INT | FLOAT)
;
Однако в следующей ситуации элементы не могут быть объединены компилятором, поэтому они будут обрабатываться отдельно:
primary
: '(' expression ')'
| INT
| FLOAT
;
В подсказке предлагаются места, где простого добавления (
... )
достаточно, чтобы компилятор мог свернуть набор, который в противном случае он не смог бы. Изменение кода на следующее предупреждение.
expression
: expression operator=DIV expression
| expression operator=MUL expression
| expression operator=ADD expression
| expression operator=SUB expression
| ( INT
| FLOAT
| BOOLEAN
| NULL
| ID
)
;