JVMLr Grammar

Here we show the grammar of JVMLr:
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