Source
	packages : Package*
	definitions: Definition*

Package
	name: String

Definition
	name: String
	access: Access
	modifiers: Modifiers
	annotations: Annotation*
	FieldLike
		tpe : Type
		Val
		Var
	ParameterizedDefinition
		typeParameters: TypeParameter*
		Def
			valueParameters: ParameterList*
			returnType: Type
		ClassLike
			definitionType: DefinitionType
			selfType: Type
			structure: Structure
		TypeMember
			TypeAlias
				tpe: Type
			TypeDeclaration
				lowerBound: Type
				upperBound: Type

Type
	SimpleType
		Projection
			prefix : SimpleType
			id : String
		ParameterRef
			id: Int
		Singleton
			path: Path
		EmptyType
		Parameterized
			baseType : SimpleType
			typeArguments: SimpleType*
	Annotated
		baseType : SimpleType
		annotations : Annotation*
	Structure
		parents : Type*
		declarations: Definition*
		inherited: Definition*
	Existential
		baseType : Type
		clause: TypeParameter*

Access
	Public
	Qualified
		qualifier: Qualifier
		Protected
		Private
		Pkg

Qualifier
	Unqualified
	ThisQualifier
	IdQualifier
		value: String

Modifiers
	isAbstract: Boolean
	isDeferred: Boolean
	isOverride: Boolean
	isFinal: Boolean
	isSealed: Boolean
	isImplicit: Boolean
	isLazy: Boolean
	isSynthetic: Boolean

ParameterList
	parameters: MethodParameter*
	isImplicit: Boolean
MethodParameter
	name: String
	tpe: Type
	hasDefault: Boolean
	modifier: ParameterModifier

TypeParameter
	id: Int
	typeParameters : TypeParameter*
	variance: Variance
	lowerBound: Type
	upperBound: Type

Annotation
	base: SimpleType
	arguments: String*

enum Variance : Contravariant, Covariant, Invariant
enum ParameterModifier : Repeated, Plain, ByName
enum DefinitionType : Trait, ClassDef, Module, PackageModule

Path
	components: PathComponent*

PathComponent
	Super
		qualifier: Path
	This
	Id
		id: String