关于Flex扫描器中std::string input(yytext,yyleng)的来源疑问
解答
- 这行代码里的
input是自定义的std::string变量名,和Flex内置的input()函数完全是两回事——只是变量名刚好和Flex的函数重名,才造成了你的混淆。 - 具体来说,
std::string input(yytext, yyleng);调用的是C++标准库中std::string的构造函数:yytext是Flex自动生成的全局指针,指向当前扫描器匹配到的文本起始地址;yyleng是Flex自动维护的全局变量,代表当前匹配文本的长度;- 这个构造函数的作用是从
yytext指向的位置,截取长度为yyleng的字符,创建一个std::string对象,变量名就叫input。
- 你找不到这个“语句来源”的原因是:它是C++标准库的原生构造函数,只要代码中引入了
<string>头文件(大概率在cool.flex的头部声明或者关联的头文件里),就可以直接使用,不需要额外自定义实现。 - 对比Flex的
input()函数:它是Flex提供的内置函数,作用是从输入流读取单个字符,返回值是int(读取到的字符或EOF),用法是int c = input();,和这行字符串构造代码没有任何关联。
内容的提问来源于stack exchange,提问作者Danh Le
相关产品推荐
相关产品推荐

