Выполняя WS:[ \t\r\n]+ '\n'-> skip;
, вы по существу удаляете (пропускаете) новую строку после i = b
и пустую строку после нее:
i = b
sum += i
, что приводит к следующему:
i = b sum += i
, что не годится: вам нужна новая строка после i = b
.
Вместо того, чтобы пропускать пустые строки, вы можете попытаться разрешить пустые строки быть частью вашего токена NEWLINE
. Поэтому вместо:
NEWLINE
: ( '\r'? '\n' | '\r' | '\f' ) SPACES?
;
вы должны сделать:
NEWLINE
: ( '\r'? '\n' | '\r' | '\f' ) (SPACES? ( '\r'? '\n' | '\r' | '\f' ))* SPACES?
;
, что позволит убедиться, что новая строка после i = b
не будет удалена.