使用 Bison-generated-compiler 编译源代码

Using Bison-generated-compiler to compile source code

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

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

感谢知识分享!

Bisons/yacc 生成的解析器不直接读取输入。解析器使用 yylex() 从输入流中提取的标记,完全由 yylex() 来读取数据或以其他方式访问输入。

默认情况下,(f)lex 生成的 yylex() 从全局变量 yyin 指向的输入流中读取输入。 yylex()fopen 一个文件或以其他方式给 yyin 一个值(除了将它初始化为 stdin)。

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

  1. 适当设置yyin:

    yyin = fopen(filepath, "r");
    
  2. 呼叫yyparse().

  3. 关闭 yyin.

  4. 根据需要重复。