LINUX.ORG.RU

Flex и Bison: C vs C++


0

1

Для создания несложного парсера некого псеводокода используются Flex и Bison, по совету мудрых людей утилиты генерят код на С, так как взаимодействие С++ у них друг с другом неудовлетворительное, но без ООП тоже жить тяжко, и в .y файле в области %{ .....%} которая будет непосредственно скопирована в *tab.c ипользуется ооп, а в последствии *tab.c компилится g++. и все вроде в порядке, но вохгникли проблемы с %union, на следующий код

%{
 #include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <map>
#include <string>
#include "LAB3.h"
#include <vector>
using namespace std;
..............................%}
%union value  {
	int iValue;
	string *sIndex;
	string* sValue;
	bool bValue;
	Node* nPtr;
	int reservValue;
}
Идет такая вот ругань appclass.y:41:2: ошибка: unknown type name «string» appclass.y:42:2: ошибка: unknown type name «string» appclass.y:43:2: ошибка: unknown type name «bool» appclass.y:44:2: ошибка: unknown type name «Node» appclass.l:6:18: фатальная ошибка: string: Нет такого файла или каталога В чем может быть дело, да и за что компилятор на несчастный bool напал, а int пощадил?

★★★

ну очевидно что код компилится как С а не С++, переименуйте файл в С++ или явно укажите компилятору что файл с с++ кодом

s0L
()

сорри, перименовать в .cpp

s0L
()

В чем может быть дело

Очевидно же:

генерят код на С
компилится g++

Я бы разделил код на C и C++, компилировал бы .c и .cpp файлы разными компиляторами, API С-части поместил в отдельный .h, который подключил в .hpp с помощью extern «C» {...}

на несчастный bool напал

http://people.cs.uchicago.edu/~iancooke/osstuff/ccc.html

efe421
()
Ответ на: комментарий от LIKAN

переименование ни к чему не привело, уже пытался...

LIKAN ★★★
() автор топика
Ответ на: комментарий от efe421

Так я и использую указатели на классы, как там и описано. Кстати, ещё вопрос, как есlipcе объяснить что *tab.c нужно компилить как с++ код, чтоб на bool хотя б не ругался? Чистый g++ всеравн ругается на string и Node(хотя в коде string*, Node*) .

LIKAN ★★★
() автор топика
Ответ на: комментарий от LIKAN

как есlipcе объяснить что *tab.c нужно компилить как с++ код

Не могу глянуть, т.к. не стоит Eclipse. Я бы не доверил ему что-то делать самому и использовал для проекта make-файл. В таком случае — просто использовать g++ в make-файле. А так, надо покопаться в свойствах проекта.

g++ всеравн ругается на string и Node

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

efe421
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.