Я разрабатываю проект, который должен разработать компилятор (фактически синтаксический анализатор), помимо основного проекта. Я использую Qt 5.3 и Windows (но результат почти такой же на Ubuntu 14.04).
У меня есть опыт использования гибких и бизонов, однако на этот раз, я разработал сканер, а затем Parser. Я тщательно тестирую сканер и удостоверяюсь, что это ошибка. но по мере добавления парсера в проект возникло много ошибок (например, неопределенная ссылка на yylex()
, однако я объявила extern int yylex()
, и я не могу использовать библиотеку, как я упомянул), а после этого, когда я устраняю парсер, некоторые функции, которые работали до этого, теперь не работает! например, теперь я не могу использовать #include <QDebug>
!
Когда я использую этот файл заголовка, компилятор говорит, что в этой библиотеке много ошибок (77 ошибок)! Я смутился, уже два дня я работаю над этим, и прогресса нет.
Я использовал «Custom Build Steps», и я установил путь к ${sourceDir}
. Кроме того, я добавил lex.yy.c
, y.tab.c
в SOURCES
и y.tab.h
в HEADERS
в .pro
файл.
Я узнал, как использовать flex и зубров через here в первый раз. и для этих ошибок я прочитал следующее:
Undefined Reference to yylex()
How to Integrate Flex and Bison
и некоторые другие ссылки ...Невозможно использовать Flex и Bison Together на Qt
ответ
Qt находятся в C++, а не С.
Если у вас есть не слишком древние версии flex и bison, у вас не возникнет проблем с компиляцией их сгенерированного кода с использованием C++, но вам нужно сообщить компилятору, что они должны быть скомпилированы на C++. (С помощью комбинации C и C++, конечно, возможно, но это требует некоторой осторожности.)
Использование GCC, должно быть достаточно, чтобы убедиться, что имена файлов, сгенерированных зубров и прогибается имеют .cc
расширение вместо .c
, которую вы можете использовать, используя опцию командной строки -o
. (Это настоятельно рекомендуется в любом случае, потому что он позволяет вам выбирать более значимые имена файлов, а затем y.tab.c
и lex.yy.c
.) Это требует некоторых настроек вашего Makefile. (Вы также можете использовать %output "filename"
директиву в bison
и %option outfile="filename"
в flex
, но вам все равно нужно настроить зависимости в вашем файле Makefile.)
Другой, менее рекомендуется, вариант заключается в использовании опции -x c++
командной строки НКА.
Без дополнительной информации о наборе инструментов, который вы используете в Windows, нелегко дать больше советов, особенно для меня (поскольку у меня есть 0 опыт работы с инструментами Windows). Но ключ должен гарантировать, что оба файла скомпилированы как C++.
Из-за того, что вы пытаетесь создать заголовок Qt, похоже, что компиляция сканера и синтаксического анализа как программы C не является практичной. Но если я не понимаю ваш проект, и ни сканер, ни парсер не требуют C++, тогда вы можете это сделать; вам нужно объявить extern "C" int yylex();
в блоке перевода C++, который вызывает yylex
. (Не помещайте это объявление в файл scanner.l, это не сработает, если вы компилируете с C.)
C++ установка flex/bison сложна.Проверьте этот пример проекта:
https://github.com/ezaquarii/bison-flex-cpp-example
Это полная, работа C++ Flex и Bison "переводчик", инкапсулированный в классе. Фактически я использовал его несколько раз с Qt 4.8.
- 1. Использование Flex и Bison с Qt
- 2. Использование Flex и Bison?
- 3. brining together flex и blazeDS
- 4. Как использовать C++ в flex и bison?
- 5. Использование Flex и Bison
- 6. ошибка flex, bison и YYSTYPE
- 7. Сложность Flex и Bison Associativity
- 8. Использование Flex и Bison вместе
- 9. Parser using flex и Bison
- 10. flex и bison: класс C++
- 11. Bison и Flex конфигурации CMake
- 12. flex и bison: неправильный вывод
- 13. Калькулятор с flex и bison
- 14. проблема редукции flex и bison
- 15. Простой Flex/Bison C++
- 16. Bison/Flex Создание списка
- 17. Bison/Flex Parsing File
- 18. Flex/Bison IDE?
- 19. Проблемы с Flex/Bison
- 20. Flex и Bison: невозможно разобрать полный файл сценария
- 21. Bison/Flex Строкового Признание
- 22. numbers flex & bison
- 23. Ошибка Flex & Bison Segmenation
- 24. Bison/Flex Если утверждения
- 25. token redefinition? flex & bison
- 26. BNF to Flex/Bison
- 27. Компилятор Flex Bison
- 28. компиляция flex и bison в cpp
- 29. Flex/bison, error: uneclared
- 30. Xcode использовать разные Bison
Может быть «extern» C «int yylex();' поможет? – Matt
@ user4419802: Не работает! – bahrami307
Что такое первая ошибка? – Matt