%option noinput nounput:它们有什么用?
%option noinput nounput: what are they for?
我是新手,所以我想知道为什么我需要使用这些指令
%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()
可用于 return 来自输入流的下一个字符的操作。 (读取的字符从输入流中移除,因此在操作完成时不会扫描它。)由于 input()
只有 return 一个字符,效率不是很高,但有时它会是不可避免的。一个例子是标记前面有明确的长度。 (总的来说,flex 不是词法扫描所有标记都有明确长度的输入流的理想工具。)
unput(c)
可用于将字符插入输入流,以便在操作完成时扫描该字符。 Flex 手册包含 a rather contrived example 将刚刚读取的令牌重新插入到括号中的输入流中。
您不应该使用 unput
来简单地重新扫描全部或部分令牌; yyless
宏为此目的更加有效。
大多数词法扫描器不需要 input
或 unput
,因此通常使用 %option
来避免为它们生成代码。
如果您刚开始学习 flex,我建议您从普通的 flex 习语开始,将 input
和 unput
之类的东西放在一边,直到您明确需要它们(如果有的话) .此外,您应该阅读 Flex manual,它将回答您的许多问题。
我是新手,所以我想知道为什么我需要使用这些指令
%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()
可用于 return 来自输入流的下一个字符的操作。 (读取的字符从输入流中移除,因此在操作完成时不会扫描它。)由于 input()
只有 return 一个字符,效率不是很高,但有时它会是不可避免的。一个例子是标记前面有明确的长度。 (总的来说,flex 不是词法扫描所有标记都有明确长度的输入流的理想工具。)
unput(c)
可用于将字符插入输入流,以便在操作完成时扫描该字符。 Flex 手册包含 a rather contrived example 将刚刚读取的令牌重新插入到括号中的输入流中。
您不应该使用 unput
来简单地重新扫描全部或部分令牌; yyless
宏为此目的更加有效。
大多数词法扫描器不需要 input
或 unput
,因此通常使用 %option
来避免为它们生成代码。
如果您刚开始学习 flex,我建议您从普通的 flex 习语开始,将 input
和 unput
之类的东西放在一边,直到您明确需要它们(如果有的话) .此外,您应该阅读 Flex manual,它将回答您的许多问题。