crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Qt + Bison, ошибки компиляции. решения/предостережения.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 10.8.2009, 17:55
 
Цитата(trdm @ 10.8.2009, 18:50) *
анализаторов пока не использовал, думаю и не буду - разбр буду вести вручную.
А что тебе даст код? Он не простой и еще незаконченный.

да весь и не нужен. Просто интересно увидеть связку, синтез....
trdm Дата 10.8.2009, 17:50
 
Цитата(AD @ 9.8.2009, 21:54) *
А синтаксический анализатор использовали? Если да, то какой? flex?
А можно код приложения на Qt еще выложить? Чтобы посмотреть этот синтез Qt и bison?

анализаторов пока не использовал, думаю и не буду - разбр буду вести вручную.
А что тебе даст код? Он не простой и еще незаконченный.
AD Дата 9.8.2009, 20:54
  А синтаксический анализатор использовали? Если да, то какой? flex?

А можно код приложения на Qt еще выложить? Чтобы посмотреть этот синтез Qt и bison?
BRE Дата 9.8.2009, 19:23
 
Цитата(Litkevich Yuriy @ 9.8.2009, 19:57) *
А что такое Bison?

http://ru.wikipedia.org/wiki/GNU_bison
Litkevich Yuriy Дата 9.8.2009, 18:57
 
Цитата(trdm @ 9.8.2009, 20:13) *
Решил поработать с Bison на Qt
А что такое Bison?
trdm Дата 9.8.2009, 16:13
  Решил поработать с Bison на Qt, собрать парсер для языка подобного 1С.
Воспользовался грамматикой отсюда: 1CLangParser (респозитарий cvs.alterplast.ru)
при попытке собрать начал получать кучу непонятного вида ошибок, справиться с которыми по
причине малого опыта и непонятного происхождения было затруднительно.
Вот приблизительные ошибки:
Раскрывающийся текст

mingw32-make.exe[1]: Entering directory `D:/Progekts/_Linux/unNStudio/Lang/Src'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\Qt\4.3.4\include\QtCore" -I"..\..\..\..\Qt\4.3.4\include\QtCore" -I"..\..\..\..\Qt\4.3.4\include\QtGui" -I"..\..\..\..\Qt\4.3.4\include\QtGui" -I"..\..\..\..\Qt\4.3.4\include" -I"." -I"..\..\..\..\Qt\4.3.4\include\ActiveQt" -I"release" -I"." -I"..\..\..\..\Qt\4.3.4\mkspecs\win32-g++" -o release\uoLang.tab.o uoLang\uoLang.tab.cpp
In file included from ../../../../Qt/4.3.4/include/QtCore/qglobal.h:1,
from ../../../../Qt/4.3.4/include/QtCore/../../src/corelib/tools/qchar.h:47,
from ../../../../Qt/4.3.4/include/QtCore/qchar.h:1,
from ../../../../Qt/4.3.4/include/QtCore/../../src/corelib/tools/qstring.h:47,
from ../../../../Qt/4.3.4/include/QtCore/qstring.h:1,
from ../../../../Qt/4.3.4/include/QtCore/QString:1,
from uoLang\/uoLangParser.h:11,
from uoLang\uoLang.tab.cpp:137:
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1697: error: expected unqualified-id before numeric constant
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1697: error: abstract declarator `const char*' used as declaration
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1697: error: `$_4' declared as an `inline' field
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1697: error: expected `;' before numeric constant
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1697: error: expected `;' before '}' token
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1698: error: expected unqualified-id before numeric constant
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1698: error: abstract declarator `const char*' used as declaration
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1698: error: `$_6' declared as an `inline' field
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1698: error: expected `;' before numeric constant
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1698: error: expected `;' before '}' token
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1699: error: expected unqualified-id before numeric constant
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1699: error: abstract declarator `const char*' used as declaration
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1699: error: `$_8' declared as an `inline' field
../../../../Qt/4.3.4/include/QtCore/../../src/corelib/global/qglobal.h:1699: error: expected `;' before numeric constant


после N-ного час битья головой апстену наконец-то дошло, что терминальные символы, которые бизон потом швыряет в дефайны, используются в других дефайнах Qt и из-за этого вылазиет куча совершенно непонятного вида ошибок.
Вышел из проблемы следующим образом, добавил по 2 подчеркивания терминальным символам:
    label__        /* Метка ('~ИмяМетки') */
    number__        /* Число (без + -) */
    date__        /* Дата (любая однострочная последовательность символов между двух апострофов ) */
    literal__        /* Строка (для простоты '|asdhsd"' тоже считается строкой) */
    name__        /* Любой идентификатор */
    func__        /* Функция */

После этого компиляция прошла.
Публикую как рецепт и предостережение будующим девелоперам, которые возможно будут возиться с Qt+Bison.
Фишка в том, что MS VS 6.0 проглотила эту грамматику и не пикнула.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 3:28