interface

'context keys' collection ( )
'root' component 'node'
'component types' [ 'component-types' ] collection (
	'node' component 'node'
)
'numerical types' [ 'numerical-types' ] collection (
	'has factor' stategroup (
		'no'
		'yes'
			'base' number
			'exponent' [ '^' ] number
	)
)
'node' [ '{' , '}' ]
	'attributes' collection (
		'type' [ ':' ] stategroup (
			'command' [ 'command' ]
				'parameters' component 'command parameters'
			'property'
				'type' stategroup (
					'component' [ 'component' ]
						'type' reference
					'collection'
						'type' stategroup (
							'dictionary' [ 'collection' ]
							'matrix' [ 'collection' '->' ]
								'referencer' component 'referencer'
						)
						'node' component 'node'
					'group' [ 'group' ]
						'node' component 'node'
					'number'
						'set' stategroup (
							'integer' ['integer']
							'natural' ['natural']
						)
						'type' reference
					'reference' [ 'text' '->' ]
						'referencer' component 'referencer'
					'state group' [ 'stategroup' ]
						'output parameters' collection ( [ '(' , ')' ]
							'node selection' [ '->' ] component 'node type path'
						)
						'states' [ '(' , ')' ] collection (
							'output arguments' [ '->' ] collection ( [ '(' , ')' ]
								'path' [ '->' ] component 'node selection path'
							)
							'node' component 'node'
						)
					'text' [ 'text' ]
					'file' ['file']
				)
		)
	)
'node type path'
	'root type' stategroup (
		'root'
		'component type' [ '!' ]
			'component type' reference
	)
	'steps' component 'node type path step'
'node type path step'
	'has steps' stategroup (
		'no'
		'yes'
			'type' stategroup (
				'state' [ '?' ]
					'state group' reference
					'state' [ '|' ] reference
				'collection' [ '.' ]
					'collection' reference
				'group' [ '+' ]
					'group' reference
			)
			'tail' component 'node type path step'
	)
'node selection path'
	'has steps' stategroup (
		'no'
		'yes'
			'type' stategroup (
				'state parent' [ '?^' ]
				'collection parent' [ '.^' ]
				'group parent' [ '+^' ]
				'state group output parameter' [ '?' ]
					'state group' reference
					'output parameter' [ '$' ] reference
				'group' [ '+' ]
					'group' reference
				'reference' [ '>' ]
					'reference' reference
				'matrix key' [ '>key' ]
			)
			'tail' component 'node selection path'
	)
'node content path'
	'has steps' stategroup (
		'no'
		'yes'
			'type' stategroup (
				'state' [ '?' ]
					'state group' reference
					'state' [ '|' ] reference
				'group' [ '+' ]
					'group' reference
			)
			'tail' component 'node content path'
	)
'referencer'
	'head' component 'node selection path'
	'collection' [ '.' ] reference
	'tail' component 'node content path'
'command parameters' [ '{' , '}' ]
	'properties' collection (
		'type' [ ':' ] stategroup (
			'matrix' ['collection' '->']
				'referencer' component 'command parameter referencer'
				'type' stategroup (
					'dense' [ '(dense)' ]
					'sparse'
				)
				'parameters' component 'command parameters'
			'reference' [ 'text' '->' ]
				'referencer' component 'command parameter referencer'
			'number'
				'set' stategroup (
					'integer' [ 'integer' ]
					'natural' [ 'natural' ]
				)
				'numerical type' reference
			'text' [ 'text' ]
			'file' ['file']
			'state group' [ 'stategroup' ]
				'states' [ '(' , ')' ] collection (
					'parameters' component 'command parameters'
				)
		)
	)
'ancestor parameters selection'
	'has steps' stategroup (
		'no'
		'yes'
			'type' stategroup (
				'matrix parent' [ '.^' ]
				'state parent' [ '?^' ]
			)
			'tail' component 'ancestor parameters selection'
	)
'command parameter referencer'
	'context type' stategroup (
		'command parameter' [ '$' ]
			'ancestor selection' component 'ancestor parameters selection'
			'type' stategroup (
				'key' [ '>key' ]
				'reference'
					'reference' [ '>' ] reference
			)
		'context node'
	)
	'head' component 'node selection path'
	'collection' [ '.' ] reference
	'tail' component 'node content path'