我正在编写一个迷你脚本语言的解析器。我的一些语法规则要求跳转到文件中的不同位置以获取信息。似乎没有一种直接的方法来实现这一目标。所以,我正在考虑将我的数据文件加载到char
数组数组中并逐行解析。这将允许我轻松地跳过整个阵列。
我的问题是,是否可以将char
数组(即char *
)提供给stdin
,这样我就可以根据需要轻松调用yyparse()
函数。
答案 0 :(得分:3)
您不需要从stdin
或甚至从文件中读取输入。您可以使用yy_scan_string
(和朋友)将字符串输入词法分析器,并使用yywrap
提供下一个字符串。 (但请注意,令牌不能跨越两个缓冲区。如果您的语言允许多行令牌(如字符串文字),这可能是逐行解析的问题。)
此外,您可以重新定义YY_INPUT
,以便以任何顺序和您喜欢的任何来源提供输入。这也避免了多线令牌问题。
说了这么多,这个项目让我觉得有些不确定。 (f)lex
中缓冲区管理的常见原因是要实现C&#39 #include
之类的功能,但这听起来并不像您正在计划的那样。