我已經定義了我的語言的BNF並且不知道如何從中設計AST。如何從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的書籍?
節點需要包含「抽象」語法類別(通常接近許多規則的LHS)。 有關AST與CST的討論,請參閱http://stackoverflow.com/a/1916687/120163,以及爲什麼您可能希望節點包含具體的語法類別(例如,準則的LHS或具體的名稱樹葉)。 –