C++ 用Bison的文件指针追加字符串

C++ 用Bison的文件指针追加字符串,c++,c,file-io,bison,C++,C,File Io,Bison,我在C中使用Flex和Bison编写了一个简单的解释器。我正在使用“yyin=fopen(argv[0],“r”);”行读取要解释的文件。好。现在,我使用CGI从浏览器收到一些请求。这是我从Broswer收到的样本数据 abc=“你好” cfg=“欢迎” 计数=10 现在我需要将这些行添加到要解释的文件中。我怎样才能完成这项任务? 我尝试将YYN与C++文件流连接起来。这样我就可以将从浏览器接收到的数据转换为StringStream。并将其附加到文件流中。但是yyin指针只接受I/O指针。是否有

我在C中使用Flex和Bison编写了一个简单的解释器。我正在使用“yyin=fopen(argv[0],“r”);”行读取要解释的文件。好。现在,我使用CGI从浏览器收到一些请求。这是我从Broswer收到的样本数据

abc=“你好”

cfg=“欢迎”

计数=10

现在我需要将这些行添加到要解释的文件中。我怎样才能完成这项任务?
我尝试将YYN与C++文件流连接起来。这样我就可以将从浏览器接收到的数据转换为StringStream。并将其附加到文件流中。但是yyin指针只接受I/O指针。是否有其他方法将这些数据与我的语言代码合并?

在CGI环境中,浏览器的输入应通过
stdin
提供。所以你可以设置
yyin=stdin。如果您想首先解析文件的内容(我觉得这很奇怪,但我相信您有自己的理由),那么您需要使用
yywrap
,如下所述:

当扫描仪从
YY_INPUT
接收到文件结束指示时,它会检查
yywrap()
功能。如果
yywrap()
返回false(零),则假定函数已执行,并将
yyin设置为指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并将0返回给其调用者。注意,在任何一种情况下,启动条件保持不变;它不会还原为
初始值

当然,你需要记住只做一次。类似的方法可能会奏效:

int yywrap() {
  if (yyin == stdin) return 1;
  yyin = stdin;
  return 0;
}

然而,在CGI环境中读取POST请求并不是那么简单。通常,您需要通过了解指定的内容长度和/或分块编码来确保阅读不会超出正文的末尾。如flex手册引用的章节所述,您可以重新定义
yyinport
宏,以提供定制的输入读取器。

在CGI环境中,浏览器的输入应通过
stdin
提供。所以你可以设置
yyin=stdin。如果您想首先解析文件的内容(我觉得这很奇怪,但我相信您有自己的理由),那么您需要使用
yywrap
,如下所述:

当扫描仪从
YY_INPUT
接收到文件结束指示时,它会检查
yywrap()
功能。如果
yywrap()
返回false(零),则假定函数已执行,并将
yyin设置为指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并将0返回给其调用者。注意,在任何一种情况下,启动条件保持不变;它不会还原为
初始值

当然,你需要记住只做一次。类似的方法可能会奏效:

int yywrap() {
  if (yyin == stdin) return 1;
  yyin = stdin;
  return 0;
}

然而,在CGI环境中读取POST请求并不是那么简单。通常,您需要通过了解指定的内容长度和/或分块编码来确保阅读不会超出正文的末尾。如flex手册引用的章节所述,您可以重新定义
yyinport
宏,以提供定制的输入读取器。

在CGI环境中,浏览器的输入应通过
stdin
提供。所以你可以设置
yyin=stdin。如果您想首先解析文件的内容(我觉得这很奇怪,但我相信您有自己的理由),那么您需要使用
yywrap
,如下所述:

当扫描仪从
YY_INPUT
接收到文件结束指示时,它会检查
yywrap()
功能。如果
yywrap()
返回false(零),则假定函数已执行,并将
yyin设置为指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并将0返回给其调用者。注意,在任何一种情况下,启动条件保持不变;它不会还原为
初始值

当然,你需要记住只做一次。类似的方法可能会奏效:

int yywrap() {
  if (yyin == stdin) return 1;
  yyin = stdin;
  return 0;
}

然而,在CGI环境中读取POST请求并不是那么简单。通常,您需要通过了解指定的内容长度和/或分块编码来确保阅读不会超出正文的末尾。如flex手册引用的章节所述,您可以重新定义
yyinport
宏,以提供定制的输入读取器。

在CGI环境中,浏览器的输入应通过
stdin
提供。所以你可以设置
yyin=stdin。如果您想首先解析文件的内容(我觉得这很奇怪,但我相信您有自己的理由),那么您需要使用
yywrap
,如下所述:

当扫描仪从
YY_INPUT
接收到文件结束指示时,它会检查
yywrap()
功能。如果
yywrap()
返回false(零),则假定函数已执行,并将
yyin设置为指向另一个输入文件,然后继续扫描。如果返回true(非零),则扫描程序终止,并将0返回给其调用者。注意,在任何一种情况下,启动条件保持不变;它不会还原为
初始值

当然,你需要记住只做一次。类似的方法可能会奏效:

int yywrap() {
  if (yyin == stdin) return 1;
  yyin = stdin;
  return 0;
}
然而,在CGI环境中读取POST请求并不是那么简单。通常,您需要通过了解指定的内容长度和/或分块编码来确保阅读不会超出正文的末尾。如flex手册引用的章节所示,您可以按顺序重新定义
yyinport