Если я забыл положить пустую строку в конце любого из моих файлов, моя программа получит синтаксическую ошибку. Проблема в том, что моя грамматика ожидает, что новая строка закончит текущую строку. Поскольку новая строка не существует, бизон генерирует синтаксическую ошибку, поскольку она не завершает правило.bison конец файла
Как это решить? Я пробовал сделать <<EOF>>
return MY_EOF
НО, но когда я делаю это, лекс вылетает из-за ужасной смерти. Я думаю, что есть код в EOF по умолчанию, который я не звоню. Я понятия не имею, какие функции они могут быть. Использование EOF создать ошибку symbol EOF is used, but is not defined as a token and has no rules
Великий волшебный трюк, работает для меня. – blueshift
Обратите внимание, что если вы хотите сделать это в лексисе повторного входа, вы должны вместо этого использовать '{static int once = 0; return (один раз =! один раз)? NEWLINE: 0; } ', поскольку в противном случае первый файл будет препятствовать распознаванию новых строк при любых будущих вызовах. –
@ Hach-Que Хорошая точка - в этом случае используйте: '{if (! Yyextra-> eof) {yyextra-> eof = true; return NEWLINE; } else {yyterminate(); }} 'и добавьте поле« eof »в ваш контекст. – nevelis