gpt4 book ai didi

c++ - 是否可以在不使用全局变量的情况下返回使用 Bison 构建的 AST?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:14 26 4
gpt4 key购买 nike

我有一个 AST(抽象语法树),用于语法,使用 Flex/Bison 构建。目前,我使用全局变量访问数据结构。

解析器.y

%{
mynamespace::AST * ast;
%}

%%
PARSER
%%

我目前构建树并按以下方式使用它:

A.hpp

#include "ast.hpp"

extern mynamespace::AST * ast;

namespace mynamespace{

extern "C" int yyparse();
extern "C" FILE * yyin;
MyClass A
{
void readGrammer( FILE * file)
{
yyin = file;
do{
yyparse();
}while(!feof(file))
}
void method1()
{
//do something with the ast
}
};
}
  1. 有没有办法让 ast 成为我的类的数据成员而不依赖于全局变量?
  2. 此外,是否可以向用户隐藏 Bison/FLex 代码?

感谢您的宝贵时间和帮助。

最佳答案

<强>1。有没有办法让 ast 成为我的类的数据成员而不依赖于全局变量?

您可以使用 %parse-param 将一个(或多个)参数添加到 yyparse 原型(prototype)。特别是,您可以将指针传递给 yyparse 并用解析结果填充它。您可能还想使 yyparse 成为“纯”(可重入)。请参阅 "The Parser Function" 部分和 "A Pure Parser"在 bison 手册中(也可能以 info bison 的形式提供)

或者,您可以使用 bison 的能力来生成 C++ 代码,这将有效地完成所有这些工作。

<强>2。另外,是否可以向用户隐藏 Bison/Flex 代码?

您可以将 namespace { block 插入到生成的代码中,但这需要一些手动(或可编写脚本的)生成后操作。 (例如,将 bison 和 flex 输出连接成一个翻译单元。)不过一点也不难。

关于c++ - 是否可以在不使用全局变量的情况下返回使用 Bison 构建的 AST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21502425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com