我已经定义了我的语言的 BNF,但不知道如何从中设计 AST。
例如,从我的 BNF 的前几行:
<program> ::= <import declarations>? <class declaration>?
<import declarations> ::= <import declaration> | <import declarations> <import declaration>
<class declaration> ::= class <identifier> <class body>
<import declaration> ::= import <type name> ';'
我如何从我的 AST 中表达这一点?我应该这样设计吗?
typedef vector<ImportDeclaration*> ImportDeclarationList;
class Program {
ImportDeclarationList importDeclarations;
ClassDeclaration classDeclaration;
};
class ImportDeclaration {
TypeName typeName;
};
class ClassDeclaration {
Identifier identifer;
ClassBody classbody;
};
我需要在这些类之间添加一些继承吗?
是否有一些关于如何从 BNF 设计 AST 的书籍?