Как я могу использовать flex & bison в Visual Studio 2010? - PullRequest
12 голосов
/ 03 мая 2011

Я прочитал http://msdn.microsoft.com/en-us/library/aa730877%28vs.80%29.aspx, но этот документ был для VS 2005. Я остановился на части "Импорт файла .rules в Visual C ++" в документе.Кажется, что VS 2010 не поддерживает файл .rules, вместо этого он использует файл .targets для пользовательских правил сборки.

Кто-нибудь знает, как использовать flex & bison в VS 2010?Спасибо.

Ответы [ 3 ]

3 голосов
/ 18 мая 2011

Хорошей новостью является то, что целевой файл работает после преобразования в 2010 г.

  • Установите пример. Откройте его с помощью конвертера vs2010, и он выполнит преобразование из 2005 * .rules в 2010 * .targets, * .props и * .xml file
  • установите cygwin и включите в себя flex, его исходный код, Bison и его исходный код
  • Добавьте путь cygwin в конец списка путей к исполняемым файлам, а путь к источнику - в конец списка включаемых путей.

Хотя пример не будет работать из-за зависимостей, теперь вы можете создать свой собственный проект и создать свой собственный лексер и парсер. Единственная проблема, с которой вы столкнетесь, - использование unistd.h. Добавьте это, и это не будет:

#define YY_NO_UNISTD_H 

Я думаю, что вы можете получить все остальное, что вам нужно для создания вашего парсера в 2010 году, в книге по флексам и зубрам.

1 голос
/ 14 апреля 2017

Пользовательские правила сборки, которые Jarda указывает, являются самыми простыми. Ниже приведена альтернатива правилам пользовательской сборки.

Не используйте предварительно скомпилированные заголовки, если вы не знаете, как использовать их достаточно хорошо, чтобы использовать их для этого. У меня была проблема с этим, когда я жаловался на переопределения макросов и преждевременный конец файла, пока я не отключил использование предварительно скомпилированных заголовков.

Создайте «Консольное приложение Win32» и сделайте его пустым проектом (без сгенерированного исходного кода). Например, я использую «SimpleFlex» в качестве имени моего проекта.

Необязательно : Вы можете настроить фильтры для папок VS, чтобы входной файл Flex отображался в папке «Исходные файлы». В свойствах папки «Исходные файлы» добавьте расширение («l» или «lex») в список расширений.

Затем создайте файл с расширением "l" (или "lex") для проекта; например, «SimpleFlex.l». В файле используйте один из примеров ниже. Затем в настройках проекта создайте Custom Build Step. Если вы не знакомы с пользовательскими сборками, найдите вкладку «Шаг пользовательской сборки» в настройках проекта. Используйте следующие шаги для пользовательского шага сборки:

Описание : Генератор лексического анализатора

Команды : C: \ Software \ FLEX252 \ flex.exe -o $ (ProjDir) \ $ (InputName) .cpp $ (InputPath)

Выходы : $ (ProjDir) \ $ (InputName) .cpp

Где:

Описание - это все, что вы хотите использовать

Команды Состоит из пути к Flex, выходного файла и входного файла. Вам нужно будет изменить путь для Flex на тот, который подходит для вашей системы.

Outputs Указывает имя файла выходного файла.

После предоставления кода для входного файла Flex, создающего шаг пользовательской сборки, скомпилируйте файл. Вы можете использовать Ctrl-F7, чтобы просто скомпилировать. На самом деле, на данный момент, вы можете просто построить проект; сборке ничего не остается, кроме как генерировать сканер (файл cpp). Пользовательская сборка должна выполнять Flex, но вы узнаете только об этом, потому что описание отображается в выводе Build. Файл cpp должен был быть сгенерирован, и тогда он может быть добавлен в проект. Если вы получаете ошибки, которые я описал выше (переопределения макросов и преждевременный конец файла), отключите предварительно скомпилированные заголовки для проекта.

Процедура для зубров очень похожа.

1 голос
/ 12 октября 2014

Этот вопрос старый, но для новичков Flex & Bison, таких как я: вы можете использовать инструмент "Win flex-bison", доступный по адресу здесь , и он также содержит руководство по настройке проекта VS C ++ в MSVS2010 +

Примечание. Если ссылка не работает, воспользуйтесь Google и найдите «Win flex-bison»; -)

...