Редактирование файлов C, сгенерированных из файлов lex и bison - PullRequest
1 голос
/ 05 сентября 2011

У меня возникла проблема с удалением предупреждения из .c файлов, которые генерируются .l(lex) и .y(bison).У меня нет предупреждений компилятора в файлах lex и bison.Но я получаю следующее предупреждение в сгенерированном файле C.

 parser.c:1772:34: warning: conversion to 'long unsigned int' from 'long int' may change the sign of the result

Это предупреждение от parser.c.Этот parser.c генерируется из parser.y.Не могли бы вы сообщить мне, как я могу навсегда удалить эти предупреждения, так как редактирование в parser.c не имеет смысла для следующей компиляции.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Если предупреждение относится к сгенерированной части кода бизона / лекса (не к вашим действиям).Вероятно, единственным решением является модификация скелета.

Но, скорее всего, предупреждение относится к части действия в исходном коде bison / lex, вам просто нужно изменить действие.Помните, что bison не анализирует содержание вашего действия (т. Е. Весь код внутри фигурных скобок.

Предположим, что вы используете функцию, возвращающую unsigned int, и используете ее в одном действии, например:

  rule : foo { $$ = some_function_returning_an_unsigned_int($1); }
              ^-------------------------------------------------^
                here : bison only expand the $'s to the correct c expression

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

Без строки исходного текста (1772: 34) и контекста трудно дать точныйответ на ваш вопрос.

1 голос
/ 07 сентября 2011

Ваши файлы Flex / Lex и Bison / Yacc расскажут мне больше об этой проблеме. Причина, по которой Flex и Bison не выдают вам предупреждения при создании кода, заключается в том, что они обрабатывают ваш код как блок текста и не пытаются его понять. Это работа компиляторов C.

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

...