将char数组输入stdin

时间:2014-08-23 03:46:36

标签: c++ c parsing yacc lex

我正在编写一个迷你脚本语言的解析器。我的一些语法规则要求跳转到文件中的不同位置以获取信息。似乎没有一种直接的方法来实现这一目标。所以,我正在考虑将我的数据文件加载到char数组数组中并逐行解析。这将允许我轻松地跳过整个阵列。

我的问题是,是否可以将char数组(即char *)提供给stdin,这样我就可以根据需要轻松调用yyparse()函数。

1 个答案:

答案 0 :(得分:3)

您不需要从stdin或甚至从文件中读取输入。您可以使用yy_scan_string(和朋友)将字符串输入词法分析器,并使用yywrap提供下一个字符串。 (但请注意,令牌不能跨越两个缓冲区。如果您的语言允许多行令牌(如字符串文字),这可能是逐行解析的问题。)

此外,您可以重新定义YY_INPUT,以便以任何顺序和您喜欢的任何来源提供输入。这也避免了多线令牌问题。

说了这么多,这个项目让我觉得有些不确定。 (f)lex中缓冲区管理的常见原因是要实现C&#39 #include之类的功能,但这听起来并不像您正在计划的那样。