Это не ясно из вашего вопроса, что должно произойти, если строка хуг присутствует. Должен ли быть вызван TokenManagerError или ParseException? Обычно в JavaCC рекомендуется принимать все входные данные на лексическом уровне --i.e. для написания диспетчера токенов, который не исключает никаких исключений. Так вот что я сделаю.
TOKEN: {
< BAD : (["x","y","z"])* "xyz" (["x","y","z"])* >
< GOOD: (["x","y","z"])+ >
< OTHER: ~[] >
}
void start() : {}{ [<GOOD>] <EOF> }
Любой файл, содержащий строку «xyz», приведет к ошибке синтаксического анализа. Любой файл, содержащий символ, отличный от x, y или z, приведет к ошибке синтаксического анализа. Любой другой файл будет анализироваться без ошибок.
Привет, это работает, но можно преобразовать его в синтаксис JavaCC, как этот '(" b ")? ("B")? ("a" ("a")? "b" ("b")?) * ("a")? («а»)? Спасибо. – allnex
@allnex Если вам нужно решение для JavaCC, вы можете пометить свой вопрос 'javacc', чтобы привлечь внимание экспертов. Я не знаком с синтаксисом JavaCC. –