加载外部文件flex bison – yyin?

我正在写flex + bison的基本语言,用于我自己的个人研究/运行简单的脚本以获得乐趣。

它通过命令行获取用户输入,解析它,并执行所需的结果。 我想添加function加载文件。

例如,当“加载文件’somefile.src’”文件被加载并自动解析时,解析器就会切换回等待命令行输入。

我无法理解文档而且很丢失。 我不熟悉flex,bison和C作为一个整体。

我正在关注这个pdf: http : //epaperpress.com/lexandyacc/ (使用复杂的计算器作为骨架并在其上添加function)以及查看bison文档http://www.gnu.org/software /bison/manual/bison.html 。

任何意见,将不胜感激。

输入处理由flex完成,因此您需要阅读flex手册以获取详细信息。

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

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

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

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

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