gpt4 book ai didi

compiler-construction - %option noinput nounput : what are they for?

转载 作者:行者123 更新时间:2023-12-04 08:39:30 24 4
gpt4 key购买 nike

我是新手,所以我想知道为什么我需要使用这些指令

%option nounput
%option noinput

是的,我知道否则我会收到这些警告:
lex.yy.c:1237:17: warning: ‘yyunput’ defined but not used [-Wunused-function]
static void yyunput (int c, register char * yy_bp )
^
lex.yy.c:1278:16: warning: ‘input’ defined but not used [-Wunused-function]
static int input (void)
^

flex 中的这些指令实际上有什么问题?
在这种情况下,我将能够使用这些功能(用于什么):
static void yyunput (int c, register char * yy_bp );
static int input (void);

有什么用?

最佳答案

您当然不需要使用这些选项。如果你不使用相应的函数,你应该使用它们,以避免编译器警告。 (如果你不关心编译器警告,你也不需要这些选项。但你应该关心编译器警告:))

函数很少使用;如果您想在某些上下文中绕过词法分析并直接读取输入( input ),或者如果您想制作要扫描的输入文本( unput ),则最需要它们。
input()可用于操作以从输入流中返回下一个字符。 (从输入流中删除读取的字符,因此在操作完成时不会对其进行扫描。)自 input()只返回单个字符,效率不高,但有时不可避免。一个例子是前面有显式长度的标记。 (总的来说,flex 不是词法扫描所有标记都具有明确长度的输入流的理想工具。)
unput(c)可用于将字符插入到输入流中,以便在操作完成时扫描该字符。 Flex 手册包含 a rather contrived example刚刚读取的 token 被重新插入到括号中的输入流中。

你不应该使用 unput简单地重新扫描全部或部分 token ; yyless宏为此目的更有效。

大多数词法扫描器都不需要 inputunput ,因此通常使用 %option以避免为它们生成代码。

如果你只是在学习 flex,我建议你从普通的 flex 习语开始,留下诸如 input 之类的东西。和 unput放在一边,直到您明确需要它们(如果有的话)。另外,您应该阅读 Flex manual ,这将回答您的许多问题。

关于compiler-construction - %option noinput nounput : what are they for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com