Мне нужно описать токен, содержащий какое-то слово. Слово может содержать английские буквы и некоторые другие специальные символы, но не должно начинаться с некоторых определенных английских букв (например, «O»).javacc токены регулярные выражения and_symbol_in
Похоже, мне нужна операция AND_SYMBOL_IN или что-то в этом роде, но я не знаю найти в документации JavaCC мне нужно поведение что-то вроде этого:.?
TOKEN : { < LETTERS: (
(~["O", "-"] AND_SYMBOL_IN ["a"-"z","A"-"Z","-",".","&","|","0"-"9"])? (["a"-"z","A"-"Z","-",".","&","|","0"-"9"])+
) > }
Я могу создать специальный маркер (как показано ниже), но я считаю, есть более красивое решение, ISN `нем
TOKEN : { < #LETTEREX: (
["a"-"z","A"-"N","P"-"Z",".","&","|","0"-"9","-"]) > }
TOKEN : { < LETTERS: (
(<LETTEREX>) (<LETTEREX> | ["O"])+
) > }
Интернет, похоже, не имеет документа, описывающего 'AND_SYMBOL_IN', поэтому без личного знания JavaCC мы не можем вам помочь. – Borodin
Я сомневаюсь, что есть более приятное решение (то есть более сжатое) - то, что вы хотите, равно количеству повторенных регулярных выражений в распознавании токенов. я не верю, что кто-то перешел на проблему реализации этой функции в общем случае для генератора лексеров. это может быть желательно для некоторых специфических потребностей в контексте unicode, но для вашей задачи я предлагаю придерживаться вашего решения. другим вариантом может быть установка TOKEN_FACTORY и настройка «newToken» на возврат разных токенов при совпадении «слова» - см. документы javacc. надеюсь, что это поможет, – collapsar