即使使用合适的标志,Flex也不会删除yyunput

时间:2012-12-20 14:54:04

标签: lex flex-lexer

我正在使用

来展示文件
%option nounput

选项并使用命令行

flex --nounput

Flex版本2.5.35。

但是,cpp输出仍包含行

#define unput(c) yyunput( c, (yytext_ptr)  )

这导致g ++的编译问题,因为没有使用unput。

有没有办法以“干净”的方式解决这个问题?两种肮脏的方式显而易见:

  1. 以某种无用的方式使用输出。
  2. 使用某些脚本从生成的cpp文件中自动删除该行。

2 个答案:

答案 0 :(得分:0)

(我试图将这个问题标记为"问题不再可重现"但是标志超时/老去。I'm answering it so that it does not remain an open unanswered question.

正如@akond所说:

  

我没有遇到过这个问题。我使用的版本是相同的(flex 2.5.35)。 %option nounput为我做了诀窍。

我也在2.5.4版本上尝试了这个,并且可以确认没有问题。选项--nounput不再被识别或documented;但是,%option nounput remains in the manual

cpp输出仍包含行#define unput(c) yyunput( c, yytext_ptr ),但这似乎不会为我生成任何g ++错误。您是使用-pedantic-errors还是其他类似选项?

答案 1 :(得分:0)

程序不错,但文档过时了。

我发现版本2.6.4接受名词输入选项并做正确的事。