ExdrTerm ::= 'V' Version CompactFlag? Term
CompactFlag ::= 'C'
Term ::= (Integer|Double|String|List|Nil|Struct|Variable)
Integer ::= ('B' <byte> | 'I' XDR_int | 'J' XDR_long)
Double ::= 'D' XDR_double
String ::= ('S' Length <byte>* | 'R' Index)
List ::= '[' Term (List|Nil)
Nil ::= ']'
Struct ::= 'F' Arity String Term*
Variable ::= '_'
Length ::= XDR_nat
Index ::= XDR_nat
Arity ::= XDR_nat
Version ::= <byte>
XDR_int ::= <4 bytes, msb first>
XDR_long ::= <8 bytes, msb first>
XDR_double ::= <8 bytes, ieee double, exponent first>
XDR_nat ::= ( <8 bits: 1 + seven bits unsigned value>
| XDR_int ) // >= 0
The version byte is 1 or 2. EXDR version 1 encodings are also valid
version 2 encodings, and version version 2 decoders can read
version 1 encoded terms.