当我使用flex生成C ++扫描器时,yytext是否会成为String的对象?

时间:2019-03-25 14:19:43

标签: flex-lexer

我正在尝试使用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是否为字符串对象?

1 个答案:

答案 0 :(得分:0)

否,它是char*,就像默认的C扫描仪一样。 (array选项不适用于C ++扫描仪。)

C ++标准库包含一个转换构造函数,该构造函数从C风格的字符串隐式构造std::string,这使您对s.push的调用可以正常工作。