作成される構文木のクラスについて

構文木の各ノードはProduction(もしくはAbstract Syntax Tree)とTokenの識別子に対応して作成されます。

TokenはTokenクラスを継承したクラスになります。

クラス名はTに続いて最初を大文字にして_を削除して_に続く一文字を大文字にした物になります。

また、プロパティとしてtextとlineとposを持ちます。それぞれLexerの認識した文字列、出現した行番号、出現したカラムとなります。

Productionは少し複雑です。Node抽象クラスを継承したProductionの識別子を元にした抽象クラスが作成され、その後各Alternative毎に具象クラスが作成されます。具象クラス内で構文規則中の要素についてはPropertyとして定義されます。

分かりにくいので例で。

上記の様な書き方の場合まず、抽象クラスPExpr(Production Expr)が定義されます。

次に、それを継承してAAddExpr(Alternative Add Expr), ASubExpr(Alternative Sub Expr)というクラスが定義されます。

また、各AXxxExprは、ノードを構成する子ノードとしてTNumクラスのleftというPropertyとTNumクラスのrightというProperty、TPlusのplusというPropertyを持つ事になります。

なお、要素の後ろに*や+を指定した場合、PropertyはLinkedListのCollectionとなります。