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

标签 c++ compiler-construction bison

好吧,到目前为止我正在使用 GNU BisonLex & 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. 必要时重复。

关于c++ - 使用 Bison-generated-compiler 编译源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58921596/

相关文章:

c++ - 在 C++ 中声明没有隐式转换的类型

c++ - 向上和向下舍入数字 C++

linux - 对 mbind 的 undefined reference

error-handling - Bison : one error causes additional but incorrect error

c++ - 在 Bison 中有一种方法可以返回 token 的名称而不是其类型

c++ - 在 C++ 中安全地传递对抽象类的引用

c++ - 从 C# 背景学习 C++

c++ - 如何确定是什么*真正*导致您的编译器错误

java字节码类定义

yacc - bison shift/reduce 问题将 add op 移动到 subexpr