我正在写flex + bison的基本语言,用于我自己的个人研究/运行简单的脚本以获得乐趣。
它通过命令行接受用户输入,解析它并执行所需的结果。我想添加功能加载文件。
例如,当“加载文件'somefile.src'”文件被加载并自动解析时,解析器就会切换回等待命令行输入。
我无法理解文档而且很丢失。我不熟悉flex,bison和C作为一个整体。
我正在关注此pdf:http://epaperpress.com/lexandyacc/(使用复杂的计算器作为骨架并在其上添加功能)以及查看bison文档http://www.gnu.org/software/bison/manual/bison.html。
任何建议都将受到赞赏。
答案 0 :(得分:2)
输入处理由flex完成,因此您需要阅读flex manual以获取详细信息。
关于多个输入缓冲区(上面链接)的部分有用于处理“包含”类似构造的示例代码。实际上,有两个示例实现;一个使用内置缓冲区堆栈(推荐),另一个使用显式缓冲区堆栈。
真的,它并不复杂。要开始阅读新文件,您需要做的就是:
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(); }
}