<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT anonymous-class (superclass?, implement*, (constructor | method | field | instance-initializer)*)>
<!ATTLIST anonymous-class
	abstract CDATA #IMPLIED
	final CDATA #IMPLIED
	synchronized CDATA #IMPLIED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT arguments (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))*>
<!ELEMENT array-initializer (array-initializer | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))*>
<!ATTLIST array-initializer
	length CDATA #REQUIRED
>
<!ELEMENT array-ref (base, offset)>
<!ELEMENT assignment-expr (lvalue, ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ATTLIST assignment-expr
	op CDATA #REQUIRED
>
<!ELEMENT base (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT binary-expr ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))+>
<!ATTLIST binary-expr
	op CDATA #REQUIRED
>
<!ELEMENT block (label*, ((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))))*)>
<!ATTLIST block
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT break EMPTY>
<!ATTLIST break
	targetname CDATA #IMPLIED
>
<!ELEMENT case (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT cast-expr (type, ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT catch (formal-argument, block)>
<!ELEMENT class (modifiers?, superclass?, implement*, (class | interface | constructor | method | field | static-initializer | instance-initializer)*)>
<!ATTLIST class
	name CDATA #REQUIRED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
	id CDATA #IMPLIED
>
<!ELEMENT code-fragment (#PCDATA)>
<!ELEMENT conditional-expr (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))+)>
<!ELEMENT constructor (modifiers?, formal-arguments, throws*, (super-call | this-call)?, block)>
<!ATTLIST constructor
	id CDATA #IMPLIED
	name CDATA #REQUIRED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT continue EMPTY>
<!ATTLIST continue
	targetname CDATA #IMPLIED
>
<!ELEMENT default-case EMPTY>
<!ELEMENT dim-expr (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT do-loop (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))?, test?)>
<!ELEMENT exception EMPTY>
<!ATTLIST exception
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT extend EMPTY>
<!ATTLIST extend
	interface CDATA #REQUIRED
>
<!ELEMENT false-case (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))))?)>
<!ELEMENT field (modifiers?, type, (array-initializer | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))?)>
<!ATTLIST field
	name CDATA #REQUIRED
	id CDATA #REQUIRED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT field-access (type | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ATTLIST field-access
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT field-ref EMPTY>
<!ATTLIST field-ref
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT field-set EMPTY>
<!ATTLIST field-set
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT finally (block)>
<!ELEMENT formal-argument (modifiers?, type)>
<!ATTLIST formal-argument
	name CDATA #REQUIRED
	id CDATA #REQUIRED
	final CDATA #IMPLIED
>
<!ELEMENT formal-arguments (formal-argument)*>
<!ELEMENT formal-ref EMPTY>
<!ATTLIST formal-ref
	name CDATA #REQUIRED
	idref CDATA #REQUIRED
>
<!ELEMENT formal-set EMPTY>
<!ATTLIST formal-set
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT if (test, true-case, false-case?)>
<!ELEMENT implement EMPTY>
<!ATTLIST implement
	interface CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT import EMPTY>
<!ATTLIST import
	module CDATA #REQUIRED
>
<!ELEMENT instance-initializer (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))))*>
<!ELEMENT instanceof-test ((((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))), type)>
<!ELEMENT interface (modifiers?, extend*, (class | method | field)*)>
<!ATTLIST interface
	name CDATA #REQUIRED
	id CDATA #IMPLIED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT java-class-file (package-decl?, import*, (class | interface)+)>
<!ATTLIST java-class-file
	name CDATA #IMPLIED
	version CDATA #IMPLIED
>
<!ELEMENT java-source-program (java-class-file+, type-dependences?)>
<!ELEMENT label EMPTY>
<!ATTLIST label
	name CDATA #REQUIRED
>
<!ELEMENT literal-boolean EMPTY>
<!ATTLIST literal-boolean
	value NMTOKEN #REQUIRED
>
<!ELEMENT literal-char EMPTY>
<!ATTLIST literal-char
	value CDATA #REQUIRED
>
<!ELEMENT literal-null EMPTY>
<!ELEMENT literal-number EMPTY>
<!ATTLIST literal-number
	value CDATA #REQUIRED
	kind NMTOKEN #IMPLIED
	base CDATA #IMPLIED
>
<!ELEMENT literal-string EMPTY>
<!ATTLIST literal-string
	value CDATA #REQUIRED
>
<!ELEMENT local-variable (var-initializer?)>
<!ATTLIST local-variable
	name CDATA #REQUIRED
	id CDATA #REQUIRED
	continued CDATA #IMPLIED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT local-variable-decl (modifiers?, type, local-variable*)>
<!ELEMENT loop (loop-init*, test?, loop-update*, (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))))?)>
<!ATTLIST loop
	kind NMTOKEN #IMPLIED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT loop-init (local-variable-decl | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))*>
<!ELEMENT loop-update (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT lvalue (var-set | field-set | formal-set | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT method (modifiers?, type, formal-arguments, throws*, block?)>
<!ATTLIST method
	name CDATA #REQUIRED
	id CDATA #REQUIRED
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT modifier EMPTY>
<!ATTLIST modifier
	name NMTOKEN #IMPLIED
>
<!ELEMENT modifiers (modifier+)>
<!ELEMENT new (type, arguments, anonymous-class?)>
<!ATTLIST new
	idref CDATA #REQUIRED
>
<!ELEMENT new-array (type, dim-expr*, array-initializer?)>
<!ATTLIST new-array
	dimensions CDATA #REQUIRED
>
<!ELEMENT offset (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT package-decl EMPTY>
<!ATTLIST package-decl
	name CDATA #REQUIRED
>
<!ELEMENT paren (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT result (#PCDATA)>
<!ELEMENT return ((((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))?)?>
<!ATTLIST return
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT send (target?, arguments)>
<!ATTLIST send
	message CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT static-initializer (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))))*>
<!ELEMENT super EMPTY>
<!ELEMENT super-call (arguments)>
<!ELEMENT superclass EMPTY>
<!ATTLIST superclass
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT switch ((((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super))), switch-block+)>
<!ATTLIST switch
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT switch-block ((case)+, (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))))*)>
<!ELEMENT synchronized (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)), block)>
<!ELEMENT target (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)) | type)>
<!ELEMENT test (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT this EMPTY>
<!ELEMENT this-call (arguments)>
<!ELEMENT throw (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ELEMENT throws (exception)+>
<!ELEMENT true-case (((block | local-variable-decl | try | throw | if | switch | loop | do-loop | return | continue | break | synchronized | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))))?>
<!ELEMENT try (block, catch*, finally?)>
<!ATTLIST try
	line CDATA #IMPLIED
	col CDATA #IMPLIED
	end-line CDATA #IMPLIED
	end-col CDATA #IMPLIED
	comment CDATA #IMPLIED
>
<!ELEMENT type EMPTY>
<!ATTLIST type
	primitive CDATA #IMPLIED
	name CDATA #REQUIRED
	dimensions CDATA #IMPLIED
	idref CDATA #IMPLIED
>
<!ELEMENT type-dependences (type-dependence+)>
<!ELEMENT unary-expr (((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))>
<!ATTLIST unary-expr
	op CDATA #REQUIRED
	post NMTOKEN #IMPLIED
>
<!ELEMENT var-initializer (static-initializer | array-initializer | ((send | new | new-array | var-ref | formal-ref | field-ref | field-access | array-ref | paren | assignment-expr | conditional-expr | binary-expr | unary-expr | cast-expr | instanceof-test | literal-number | literal-string | literal-char | literal-boolean | literal-null | this | super)))?>
<!ELEMENT var-ref EMPTY>
<!ATTLIST var-ref
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT var-set EMPTY>
<!ATTLIST var-set
	name CDATA #REQUIRED
	idref CDATA #IMPLIED
>
<!ELEMENT type-dependence (type-ref*)>
<!ATTLIST type-dependence
	filename CDATA #REQUIRED
	signature CDATA #REQUIRED
>
<!ELEMENT type-ref EMPTY>
<!ATTLIST type-ref
	signature CDATA #REQUIRED
>
