Моя проблема в том, что я пытаюсь запустить проблему, которую я кодировал, используя сканер flex-bison scanner-parser. Предполагается, что моя программа должна принимать пользовательский ввод (в моем случае запросы для системы баз данных, которую я разрабатываю), lex и parse, а затем выполнять соответствующие действия. На самом деле происходит то, что мой код синтаксического анализатора неправильно интерпретирует строковые литералы, которые я ему передаю.
Вот мой код:
130 insertexpr : "INSERT" expr '(' expr ')'
131
132 {
133 $$ = new QLInsert( $2, $4 );
134 }
135 ;
И мой ввод, следуя подсказке "Query:":
Запрос: INSERT abc (5);
input: 1.0-5: синтаксическая ошибка, неожиданная строка, ожидаемый конец файла или конец строки или INSERT или ';'
Теперь, если я удалю строковый литерал INSERT из моего кода parser.yy в строке 130, программа будет работать нормально. Фактически, после сохранения входных данных (а именно, «abc» и целого числа 5) они возвращаются обратно ко мне правильно.
Сначала я подумал, что это проблема кодировки символов. Код Bison должен быть скомпилирован и запущен с использованием тех же кодировок, что не должно вызывать проблем, поскольку я компилирую и запускаю с того же терминала.
Сведения о моей системе:
Ubuntu 8.10 (универсальный Linux 2.6.24-16)
гибкий 2.5.34
бизон 2.3
gcc 4.2.4
Если вам нужна дополнительная информация или код, дайте мне знать!