crossplatform.ru

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

> Qt + Bison, ошибки компиляции. решения/предостережения.
trdm
  опции профиля:
сообщение 9.8.2009, 16:13
Сообщение #1


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Решил поработать с 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 проглотила эту грамматику и не пикнула.

Сообщение отредактировал trdm - 9.8.2009, 16:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 9.8.2009, 18:57
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(trdm @ 9.8.2009, 20:13) *
Решил поработать с Bison на Qt
А что такое Bison?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 9.8.2009, 19:23
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Litkevich Yuriy @ 9.8.2009, 19:57) *
А что такое Bison?

http://ru.wikipedia.org/wiki/GNU_bison
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.8.2009, 20:54
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


А синтаксический анализатор использовали? Если да, то какой? flex?

А можно код приложения на Qt еще выложить? Чтобы посмотреть этот синтез Qt и bison?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 4:50