好吧,到目前为止,我使用GNU Bison和Lex & Yacc文件来构建C ++中的解析器,程序通过yyparse()
函数来调用它。因此,我程序的g ++编译会生成一个.a文件,该文件允许用户插入一些要解析的代码。
但是我想使用生成的文件来编译整个项目目录层次结构(即一堆文件)。那么,Bison是否能够在独立的存档中生成结果编译器,以允许我这样做?也许有一种解析多个文件的简单方法?还是我应该自己通过C ++算法来管理这种行为?
感谢知识共享!
答案 0 :(得分:2)
由野牛/ yacc生成的解析器不会直接读取输入。解析器使用yylex()
从输入流中提取的令牌,将其完全交给yylex()
来读取数据或访问输入。
默认情况下,由(f)lex生成的yylex()
从全局变量yyin
指向的输入流中读取输入。 yylex()
不会fopen
一个文件,也不会给yyin
一个值(将其初始化为stdin
除外)。
要通过解析器传递多个文件:
适当设置yyin
:
yyin = fopen(filepath, "r");
致电yyparse()
。
关闭yyin
。
根据需要重复。