繁体   English   中英

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

[英]Editing C files generated from lex and bison files

我一直无法从.l(lex).y(bison)生成的.c文件中删除警告。 我在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中进行编辑对下一次编译没有任何意义。

提前致谢。

如果警告与野牛/ 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

如果rule的预期令牌类型为int,则将显示ac警告。

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

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

c代码是从文件生成的。 由于生成的代码相当复杂,所以最好不要对生成的代码进行周转。 更好地从源头上正确处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM