使用Bison生成的编译器编译源代码

时间:2019-11-18 19:28:31

标签: c++ compiler-construction bison

好吧,到目前为止,我使用GNU BisonLex & Yacc文件来构建C ++中的解析器,程序通过yyparse()函数来调用它。因此,我程序的g ++编译会生成一个.a文件,该文件允许用户插入一些要解析的代码。

但是我想使用生成的文件来编译整个项目目录层次结构(即一堆文件)。那么,Bison是否能够在独立的存档中生成结果编译器,以允许我这样做?也许有一种解析多个文件的简单方法?还是我应该自己通过C ++算法来管理这种行为?

感谢知识共享!

1 个答案:

答案 0 :(得分:2)

由野牛/ yacc生成的解析器不会直接读取输入。解析器使用yylex()从输入流中提取的令牌,将其完全交给yylex()来读取数据或访问输入。

默认情况下,由(f)lex生成的yylex()从全局变量yyin指向的输入流中读取输入。 yylex()不会fopen一个文件,也不会给yyin一个值(将其初始化为stdin除外)。

要通过解析器传递多个文件:

  1. 适当设置yyin

    yyin = fopen(filepath, "r");
    
  2. 致电yyparse()

  3. 关闭yyin

  4. 根据需要重复。