Я использую Bison 3.0.4 + flex2.6.0 для генерации синтаксического анализатора C ++.Все отлично работает для небольших файлов, но когда все становится действительно большим (сотни строк или действительно большие токены), я начинаю получать странные ошибки, такие как:
"фатальная внутренняя ошибка сканера - никаких действий не найдено"
Я провел некоторое исследование отладки и +, и я считаю, что это проблемы со стеком, а руководство зубров говорит, чтобы установить YYINITDEPTH ....
- проблема в том, гдеЯ установил макрос?Я положил его в начало моего файла .yy, но ничего не изменилось.
- есть ли способ напечатать / показать значение во время выполнения?
Я попытался перейти на бизон 3.2, чтобы проверить, исправит ли это проблему, но я получаю эту ошибку:
"ошибка: макрос" YY_RVREF "передал 2 аргумента,но занимает всего 1 "
Есть идеи?Я полностью застрял!
This is what my .yy file looks like:
%skeleton "lalr1.cc"
%require "3.0"
%debug
%locations
%defines
%define api.namespace {SIT}
%define parser_class_name {SIT_Parser}
%code requires{
namespace SIT {
class SIT_Reader;
class SIT_Scanner;
}
// The following definitions is missing when %locations isn't used
#ifndef YY_NULLPTR
#if defined __cplusplus && 201103L <= __cplusplus
#define YY_NULLPTR nullptr
#else
#define YY_NULLPTR 0
#endif
#endif
#ifndef YYINITDEPTH
#define YYINITDEPTH 9000
#endif