提问人:Jose Fruan 提问时间:7/13/2023 更新时间:7/13/2023 访问量:59
这是在 C++ 中构造抽象语法树的语法节点的合理方法(或者是否有更安全或更节省内存的构造)?
Is this a reasonable way to construct the syntax node of an abstract syntax tree in C++ (or is there a safer or more memory-efficient construction)?
问:
我正在为一种新的通用编程语言编写一个(很可能是自下而上的)解析器。我的解析器接受令牌流。为了完整起见,这里是 .token_t
struct token_t {
// Kind of token enum
token_kind kind;
// Overall position in file
int position;
// The location of the token's first associated char (left-to-right, top-to-bottom)
// Useful for giving feedback if there is a syntax error
int row, col;
// The substring associated with the token
std::string value;
};
语法节点由以下部分组成:
struct syntax_node_t {
// Kind of syntax node enum (what this node represents, i.e. binary expression)
syntax_node_kind kind;
// Token associated with this syntax node
token_t token;
// A list of children associated with this kind of syntax node
std::vector<syntax_node_t> children;
};
我希望解析器在构造时以及完成抽象语法树时存储指向树根(即 )的指针。syntax_node_t
我有一个担忧,那就是子向量应该是指向 的指针向量,以便子向量仅具有对节点的引用而不是它们的副本。这种担忧是否有效,我应该将类型更改为指针吗?syntax_node_t
也欢迎任何其他反馈。
答: 暂无答案
评论
std::vector<syntax_node_t>
value
position
std::string_view
std::span
std::vector<std::unique_ptr<syntax_node_t>>