ID : ('a'..'z' | 'A'..'Z')+;
указывает, что идентификатор представляет собой последовательность из одной или нескольких букв, но не допускает никаких цифр. Попробуйте
ID : ('a'..'z' | 'A'..'Z' | '0'..'9')+;
, что позволит, например, abc
, 123
, 12ab
и ab12
. Если вы не хотите использовать последние типы, вам придется немного реструктурировать правило (оставленное как вызов ...)
Чтобы принять произвольно много идентификаторов, вы можете определить atom
как ID+
вместо ID
.
Кроме того, вам, вероятно, потребуется указать AND
, OR
, ->
и ~
в качестве токенов, чтобы, как говорит @Bart Kiers, первые два не классифицировались как ID
и так, что последние два будут вообще признаны.