Я пишу грамматику с большим количеством нечувствительных к регистру ключевых слов в ANTLR4.Я собрал несколько файлов примеров для этого формата, которые я пытаюсь протестировать, и некоторые используют те же токены, которые существуют в качестве ключевых слов в качестве идентификаторов в других местах.Например, есть ключевое слово CORE
, которое в других местах используется как ID
для структуры из пользовательского ввода.Вот некоторые части моей грамматики:
fragment A : [aA]; // match either an 'a' or 'A'
fragment B : [bB];
fragment C : [cC];
[...]
CORE: C O R E ;
[...]
IDSTRING: [a-zA-Z_] [a-zA-Z0-9_]*;
id: IDSTRING ;
В этом случае выдается ошибка line 7982:8 mismatched input 'core' expecting IDSTRING
, поскольку пользовательский ввод задан как IDSTRING
, но всегда используется правилом ключевого слова.Во входных данных он существует как ключевое слово и как идентификатор:
MACRO oa12f01
CLASS CORE ; #here it is a KEYWORD
[...]
SITE core ; #here it is a ID
Есть ли способ, позволяющий пользователям использовать некоторые ключевые слова в качестве идентификаторов, меняя мою грамматику, например, «приведение» токена к IDSTRING
для таких конъюнктивных правил или это ложная надежда на не написанные от руки парсеры?