QLALR - пример QParser падает при запуске в Visual Studio 2008 - PullRequest
1 голос
/ 12 января 2012

К сожалению, мне нужно разобрать язык (JScript).Я начал изучать, как использовать Flex, зная, что Qt предоставляет полезный инструмент под названием QLALR для генерации парсера.В \ util \ qlalr \ examples \ qparser я нашел очень интересный пример интеграции сгенерированного гибкого сканера и синтаксического анализатора, сгенерированного qlalr.Кроме того, из того, что я понял (но это не могло быть правдой ...), в примере представлен полезный интерфейс QParser, чтобы избежать перезаписи функции синтаксического анализа.Для того, чтобы скомпилировать его, мне пришлось скачать unistd.h для Windows с http://sourceforge.net/projects/gnuwin32/files/flex/2.5.4a-1/flex-2.5.4a-1-lib.zip/download. Это в каталоге включить.В любом случае это не более чем:

/*

This file is part of the Mingw32 package.
*
unistd.h maps (roughly) to io.h
*/
#ifndef _STRICT_ANSI_

#include <io.h>
#include <process.h>

#endif

Используя этот файл, я смог скомпилировать пример qparser, но когда я его запускаю, у меня происходит сбой перед входом в основную функцию с сообщением об ошибке: Программа '[3736] qparser.exe: Native 'завершил работу с кодом 2 (0x2).

Я также получаю следующие предупреждающие сообщения:

1>lex.calc.c(903) : warning C4003: not enough actual parameters for macro 'calcwrap'
1>lex.calc.c(1056) : warning C4018: '<' : signed/unsigned mismatch
1>lex.calc.c(1238) : warning C4003: not enough actual parameters for macro 'calcwrap'
1>lex.calc.c(1402) : warning C4996: 'isatty': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _isatty. See online help for details.
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\io.h(312) : see declaration of 'isatty'
1>lex.calc.c(1402) : warning C4996: 'fileno': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _fileno. See online help for details.
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(722) : see declaration of 'fileno'
1>Linking...
1>LINK : debug
qparser.exe not found or not built by the last incremental link; performing full link

Я использую Visual Studio 2008в Windows 7 и Qt 4.8.0 скомпилированы из того же пакета, в котором я получил QLALR.

Некоторые предложения?Спасибо

1 Ответ

1 голос
/ 13 января 2012

Хорошо, я все решил сам.Проблема в том, что предоставленный .pro не содержит директивы win32-msvc2008: CONFIG + = console.Также я предлагаю вам добавить% option nounistd в начале calc.l и #include, чтобы использовать функцию atty, предусмотренную в каталоге include по умолчанию.

...