Используйте typedef в union - PullRequest
       5

Используйте typedef в union

0 голосов
/ 03 ноября 2010

Я хочу переопределить число с плавающей запятой, используя:

typedef float decimal

, потому что я использую таблицу "uthash", и у нее нет метода add_float, это может сделать только я через struct

я использовал это в бизоне

%union{
   decimal dec;
}
and then declare the token
%token <dec> DECIMAL

если я делаю в flex

{DECIMAL} {yylval.dec=atof(yytext); return (DECIMAL);}

, он говорит мне: ОШИБКИ в документе flex: YYSTYPE не имеет члена с именем dec

ОШИБКИ в бизоне (в объединении) ожидаемый список спецификаторов-спецификаторов перед десятичной дробью.

Есть идеи?Любая помощь приветствуется!

1 Ответ

1 голос
/ 03 ноября 2010

Кажется, у вас есть несколько проблем.

Во-первых, ваше гибкое правило {DECIMAL} {yylval.dec=atof(yytext); return (DECIMAL);} не имеет смысла. Является ли DECIMAL макросом или заменой некоторого подходящего шаблона регулярного выражения? Это не так, потому что DECIMAL объявлен как ЗНАК в зубре.

В любом случае, простая проблема в вашем союзе для yylval в Bison - это тип decimal, который нигде не был объявлен. Вы должны объявить typedef decimal float где-нибудь в вашем файле зубров и в файле flex. Это то, что сообщение об ошибке

ERRORS in the bison (in the union) expected specifier-qualifier-list before decimal.

относится к более чем 99% времени.

Теперь, чтобы решить эту проблему, вам нужно либо поместить ее в отдельный файл, и включить этот файл в файлы flex и bison. Это грязно, и более простой подход состоит в том, чтобы просто поместить его в первый раздел файла Bison (первая часть, где идет код C). Тогда, если вы используете

bison -d myfile.y

вы получите новый файл с именем myfile.tab.h (вместе с myfile.tab.c). Заголовок должен быть включен в гибкий файл. Если вы загляните в этот заголовочный файл, то увидите, что все его определения% токенов также отображаются в нем, так что вы можете вносить изменения в любое время в зубре, и вам не нужно беспокоиться о внесении таких же изменений в гибкий файл. *

...