加载外部文件 flex bison - yyin?

loading external files flex bison - yyin?

我正在用 flex + bison 编写一种基本语言用于我自己的个人研究/运行 简单的脚本是为了好玩。

它通过命令行获取用户输入,对其进行解析,然后执行所需的结果。我想添加功能加载文件。

例如,当 "load file 'somefile.src'" 文件被加载并自动解析时,解析器将切换回等待命令行输入。

我无法理解文档,我很迷茫。作为一个整体,我对 flex、bison 和 C 还是个新手,这无济于事。

我正在关注此 pdf:http://epaperpress.com/lexandyacc/ (using the complex calculator as a skeleton and adding functionality on top of it) as well as looking through bison documentation http://www.gnu.org/software/bison/manual/bison.html

如有任何建议,我们将不胜感激。

输入处理由 flex 完成,因此您需要阅读 flex manual 了解详细信息。

关于多个输入缓冲区的部分(上面链接)有处理 "include" 类构造的示例代码。事实上,有两个示例实现;一种使用内置缓冲区堆栈(推荐),另一种使用显式缓冲区堆栈。

真的,不是很复杂。要开始读取新文件,您需要做的就是:

yyin = fopen(filename, "r");
if ( !yyin ) /* Handle the error */
yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE ));

您在 EOF 规则中弹出缓冲区状态:

<<EOF>> { yypop_buffer_state();
          /* Make sure we stop if the EOF is the original input. */
          if (!YY_CURRENT_BUFFER) { yyterminate(); }
        }