我正在尝试使用Flex生成C ++扫描器。当我在代码中使用yytext的数据类型时,我会徘徊。 yytext在这种情况下是否为字符串对象?还是它仍然是char的指针?我搜索了信息,但仍然无法获取。
这是我编写的代码。
%option c++
%option noyywrap
> %{
>
> #include <iostream>
>
> #include <fstream>
>
> #include <stack>
>
> using namespace std;
>
> stack<string> s;
>
> %}
>
> var_string [a-z]+
>
> var_hybrid \\?\[[0-9]\]
>
> %%
>
> assign {BEGIN ASSIGN;} {s.push(yytext);}
>
> {var_string} {s.push(yytext);}
>
> {var_hybrid} {s.push(yytext);}
>
> [ \n\t\r\f]+ {s.push(yytext);}
>
> . {s.push(yytext);}
>
> %%
我使用堆栈,然后将yytext推入堆栈。
我可以使用cout << s.top() << endl;
在这种情况下,yytext是否为字符串对象?
答案 0 :(得分:0)
否,它是char*
,就像默认的C扫描仪一样。 (array
选项不适用于C ++扫描仪。)
C ++标准库包含一个转换构造函数,该构造函数从C风格的字符串隐式构造std::string
,这使您对s.push
的调用可以正常工作。