JavaParser

Tiger以前の2ndEditionレベルなら9割ぐらいは通るようになった。
読み込んだソース

class HelloJava {
	public static void main(String[] args){
		System.out.println("HelloJava");
	}
}

構文木の内容

sample/HelloJava5.java:syntax.JavaCompilationUnit={
    packageName=null;
    imports:java.util.ArrayList={
    }
    decls:java.util.ArrayList={
        [0]:syntax.JavaClassDeclaration={
            modifiers:syntax.JavaModifiers={
                modifiers:Integer=0
            }
            name:String="HelloJava"
            typeParams=null;
            extendsType=null;
            implementsTypeList=null;
            body:syntax.JavaClassBody={
                list:java.util.ArrayList={
                    [0]:syntax.JavaClassMethodDeclaration={
                        modifiers:syntax.JavaModifiers={
                            modifiers:Integer=9
                        }
                        retType:syntax.JavaBasicType={
                            type:String="void"
                            brackets:Integer=0
                        }
                        methodName:String="main"
                        formalParams:syntax.JavaFormalParameters={
                            list:java.util.ArrayList={
                                [0]:syntax.JavaFormalParameter={
                                    modifiers:Integer=0
                                    type:syntax.JavaComplexType={
                                        list:java.util.ArrayList={
                                            [0]:syntax.JavaIdentifierTypeArguments={
                                                id:syntax.JavaIdentifier={
                                                    identifier:String="String"
                                                }
                                                args=null;
                                            }
                                        }
                                        brackets:Integer=1
                                    }
                                    id:String="args"
                                }
                            }
                        }
                        throwsList=null;
                        body:syntax.JavaBlock={
                            list:java.util.ArrayList={
                                [0]:syntax.JavaStatementExpression={
                                    exp:syntax.JavaMethodSelector={
                                        exp:syntax.JavaIdentifierExpression={
                                            ids:java.util.ArrayList={
                                                [0]:syntax.JavaIdentifier={
                                                    identifier:String="System"
                                                }
                                                [1]:syntax.JavaIdentifier={
                                                    identifier:String="out"
                                                }
                                            }
                                        }
                                        name:String="println"
                                        args:syntax.JavaArguments={
                                            list:java.util.ArrayList={
                                                [0]:syntax.JavaStringLiteral={
                                                    value:String="HelloJava"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

長い!