Set up AST node hierarchy and keyword constants

readonly property is fine. In the implementation file, the method would throw a subclass responsibility exception.