加载外部文件flex bison - yyin?

时间:2015-08-05 18:06:05

标签: c bison flex-lexer

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

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

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

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

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

任何建议都将受到赞赏。

1 个答案:

答案 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(); }
        }