加载外部文件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(); } }