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