| Program | ::= | program(Classes | Interfaces). | 
| Classes | ::= | [ ] | [Class | Classes] | 
| Interfaces | ::= | [ ] | [Interface | Interfaces] | 
| Class | ::= | class(ClassName,OptionClassName,SuperInterfaces,Fields,Methods,final(Bool),public(Bool),abstract(Bool)) | 
| Interface | ::= | interface(InterfaceName,SuperInterfaces,Fields,Methods,final(Bool),public(Bool),abstract(Bool)) | 
| ClassName | ::= | className(packageName(String),shortClassName(String)) | 
| OptionClassName | ::= | none | ClassName | 
| InterfaceName | ::= | interfaceName(packageName(String),shortClassName(String)) | 
| SuperInterfaces | ::= | Interfaces | 
| Fields | ::= | [ ] | [Field | Fields] | 
| Field | ::= | field(FieldSignature,final(Bool),static(Bool),Visibility,initialValue(InitialValue)) | 
| FieldSignature | ::= | fieldSignature(FieldName,Type) | 
| Visibility | ::= | package | protected | private | public | 
| InitialValue | ::= | undef | null | int(Int) | 
| FieldName | ::= | fieldName(ClassName,ShortFieldName) | 
| ShortFieldName | ::= | shortFieldName(String) | 
| Type | ::= | primitiveType(PrimType) | refType(RefType) | 
| PrimType | ::= | boolean | byte | short | int | 
| RefType | ::= | classType(ClassName) | interfaceType(InterfaceName) | arrayType(Type) | 
| Methods | ::= | [ ] | [Method | Methods] | 
| Method | ::= | method(MethodSignature,OptionBytecodeMethod,final(Bool),static(Bool),Visibility) | 
| MethodSignature | ::= | methodSignature(MethodName,Parameters,OptionType) | 
| MethodName | ::= | methodName(ClassName,ShortMethodName) | 
| ShortMethodName | ::= | shortMethodName(String) | 
| Parameters | ::= | [ ] | [Type | Parameters] | 
| OptionType | ::= | none | Type | 
| OptionBytecodeMethod | ::= | none | bytecodeMethod(StackSize,LocalVarSize,FirstAddress,methodId(ModuleName,MethodIndex),ExceptionHandlers) | 
| StackSize | ::= | UnsignedInt | 
| LocalVarSize | ::= | UnsignedInt | 
| FirstAddress | ::= | Pc | 
| ModuleName | ::= | String | 
| MethodIndex | ::= | UnsignedInt | 
| Instructions | ::= | [ ] | [Instruction | Instructions] | 
| ExceptionHandlers | ::= | [ ] | [ExHandler | ExceptionHandlers] | 
| ExceptionHandler | ::= | exceptionHandler(OptionClassName,StartPc,EndPc,HandlerPc) | 
| StartPc | ::= | Pc | 
| EndPc | ::= | Pc | 
| HandlerPc | ::= | Pc | 
| Bytecode | ::= | bytecode(ModuleName,Pc,MethodIndex,Instruction,Offset). | 
| Pc | ::= | UnsignedInt | 
| MethodIndex | ::= | UnsignedInt | 
| Offset | ::= | Int | 
| VariableIndex | ::= | UnsignedInt | 
| Instruction | ::= | aaload | aastore | aconst_null | aload(VariableIndex) | areturn | arraylength | anewArray(refType(RefType)) | astore(VariableIndex) | athrow | baload | bastore | checkcast(refType(RefType)) | const(primitiveType(PrimType),Int) | dup| dup_x1 | dup_x2 | getfield(FieldSignature) | getstatic(FieldSignature) | goto(Offset) | i2b | i2s | ibinop(BinOpType) | iaload | iastore | if_acmpeq(Offset) | if_acmpne(Offset) | if_icmp(Offset,CompType) | if0(Offset,CompType) | ifnonnull(Offset) | ifnull(Offset) | iinc(VariableIndex,Int) | iload(VariableIndex) | instanceof(refType(RefType)) | invokestatic(MethodSignature) | invokevirtual(MethodSignature) | ireturn | istore(VariableIndex) | multianewarray(refType(RefType)) | new(ClassName) | newarray(primitiveType(PrimType)) | nop | pop | pop2 | putfield(FieldSignature) | putstatic(FieldSignature) | return | saload | sastore | swap | ineg | 
| BinOpType | ::= | addInt | andInt | divInt| mulInt | orInt | remInt | shlInt | shrInt | subInt | xorInt | 
| CompType | ::= | eqInt | neInt | ltInt | leInt | geInt | gtInt |