我正在编写一个 Rust 编译器,它记录在 Java Dragon book 中。到目前为止,我只写了一个词法分析器。有一个 Token 类,它有子 Word、Num、Real。反过来,Word 类有一个 Type 子级,它有一个 Array 子级。
我目前如何在 Rust 中实现这一点:
pub struct TokenBase {
tag: u32,
}
pub struct WordBase {
token: TokenBase,
lexeme: String,
}
// ...
pub enum Word {
Word(WordBase),
Type(TypeBase),
}
pub enum Token {
Token(TokenBase),
Word(Word),
//...
}
在 Rust 中,枚举变量的关联值可以定义为匿名结构:
pub enum Token {
Token {
tag: u32,
},
//...
但是如何为后代定义结构呢?它可以做到吗?
在这种情况下无法确定后代的结构(变体 Word::Word、Word::Type 的关联值)。