编辑从lex和bison文件生成的C文件

时间:2011-09-05 16:47:36

标签: c compiler-warnings bison lex

我一直无法从.c文件中删除警告 .l(lex).y(bison)。我在lexbison文件中没有任何编译器警告。但是我在生成的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 个答案:

答案 0 :(得分:2)

如果警告与生成的bison / lex代码部分有关(不是你的行动)。 可能唯一的解决方案是修改骨架。

但很可能警告与您的bison / lex源代码中的操作部分有关,您只需修改操作即可。请记住,野牛不会分析您的行为内容(即括号内的所有代码。

假设您正在使用一个函数返回unsigned int并在一个操作中使用它:

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

如果规则的预期令牌类型是int,则会有c警告。

如果没有源代码行(1772:34)和上下文,很难对问题给出准确答案。

答案 1 :(得分:1)

您的Flex / Lex和Bison / Yacc文件会告诉我有关此问题的更多信息。 Flex和Bison在生成代码时没有给出警告的原因是因为它们将您的代码视为一个文本块而不是试图理解它。那是C编译器的工作。

c代码是从您的文件生成的。调整生成的代码并不是一个好主意,因为它相当复杂。在源头上做得更好。