2013-05-01 2 views
1

Я пытаюсь создать грамматику в Javacc, а для имени функции у меня может быть любой ассортимент букв более низкого символа или «основной». Если «main» - это имя функции, необходимо выполнить различные процедуры.Исключить строку как токен в Javacc

Моя проблема заключается в том, что main не может быть сопоставлен как строковый литерал, когда он включен как выбор, и вместо этого сопоставляется. Поэтому я надеялся, что, если я исключу слово «главное» из токена, это может сработать!

< FUNCNAME: (["a"-"z"])+ ~["main"]> 

ответ

2

Проще всего сделать, чтобы сделать «основной» другой токен.

TOKEN: { <MAIN: "main" > } 
TOKEN: { <FUNCNAME: (["a"-"z"])+ > } 

Оба правила соответствуют префиксу «основной», но первый выигрывает, потому что он первый. Обратите внимание, что «поддерживать» по-прежнему является FUNCNAME по максимальному правилу munch. См. FAQ 3.3 в FAQ по JavaCC.