2014-10-18 4 views
1

У меня возникла проблема с моим проектом JavaCC. Я пытаюсь распознать объявление переменной, которое имеет возможный префикс переменной, вид и имя переменной (id). Но парсер распознает первое слово как добрый и не переходит к остальной части линии.JavaCC распознает токен в токене

Он говорит:

Exception in thread "main" ParseException: Encountered " <KIND> "char "" at line 2, column 9. 
Was expecting one of: 
<VARIABLE> ... 

вот как мои жетоны объявлены

TOKEN : 
{ 
    <START: "start"> {debugStream.println("start");} 
    | <END: "end"> {debugStream.println("end");} 
    | <VARIABLE: ("variable" <KIND> <ID>) | (<KIND> <ID>)> {debugStream.println("variable decl");} 
    | <KIND: "integer"|"real"|"logic"|"char"|"text"> {debugStream.println("kind");} 
    | <ID: (["a"-"z","_"])+> {debugStream.println("id");} 
} 

Я также попытался поставить тип и идентификатор в special_tokens, то анализатор идет без ошибок, но дон 't распознавать объявление переменной.

Edit:

вот входной строки

start 
    char sex 
    integer num 
end 
+0

Вы не сказали, что определение «ТИПА». Также вы можете показать строку ввода. –

+0

извините, что @ TheodoreNorvell. Я редактировал сообщение, чтобы добавить строку ввода. Это очень простой. И нет ТИПА, это была просто опечатка. – bfagundes

ответ

1

Если вы действительно хотите «голец секс», чтобы разметить, как один знак доброй VARIABLE то вам нужно разрешить пробелы в VARIABLE с. Например.

<VARIABLE: ("variable" (" ")+ <KIND> (" ")+ <ID>) | (<KIND> (" ")+ <ID>)> 

Однако, я хотел бы предложить, что вы считаете, выполнив следующие действия: Измените VARIABLE правило к

<VARIABLE: "variable"> 

Написать новый нетерминал

void variable() : {} { 
    <VARIABLE> <KIND> <ID> 
| 
    <KIND> <ID> 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^