4.1 Formal syntax (BNF)

<bytecode> ::= <magic_number> <adress> <operation_list>

<magic_number> ::= "E\fE\f" ; 0x45 0xc 0x45 0xc

<adress> ::= <byte> <byte> <byte> <byte> <byte> <byte> <byte> <byte>

<operation_list> ::= <operation> | <operation>  <operation_list>

<operation> ::= <not>
              | <lnot>
              | <neg>
              | <and>
              | <or>
              | <xor>
              | <shl>
              | <shr>
              | <land>
              | <lor>
              | <add>
              | <sub>
              | <mult>
              | <div>
              | <mod>
              | <gt>
              | <ge>
              | <lt>
              | <le>
              | <eq>
              | <diff>
              | <updz>
              | <push_stack>
              | <pop_stack>
              | <pop>
              | <call>
              | <ret>
              | <jmp>
              | <zjmp>
              | <aff>
              | <affs>
              | <push_value>
              | <push_label>


<not> ::= "\003"

<lnot> ::= "\004"

<neg> ::= "\005"

<and> ::= "\006"

<or> ::= "\a"

<land> ::= "\b"

<lor> ::= "\t"

<xor> ::= "\n"

<shl> ::= "\v"

<shr> ::= "\f"

<add> ::= "\r"

<sub> ::= "\016"

<mult> ::= "\017"

<div> ::= "\020"

<mod> ::= "\021"

<gt> ::= "\022"

<ge> ::= "\023"

<lt> ::= "\024"

<le> ::= "\025"

<eq> ::= "\026"

<diff> ::= "\027"

<updz> ::= "\030"

<push_stack> ::= "\035" <arguments>

<pop_stack> ::= "\036" <arguments>

<pop> ::= "\037"

<call> ::= """

<ret> ::= "#"

<jmp> ::= "$"

<zjmp> ::= "%"

<aff> ::= "&"

<affs> ::= "'" <arguments> <string>

<push_value> ::= "Y" <arguments>

<push_label> ::= "[" <arguments>

<arguments> ::= <byte> <byte> <byte> <byte> <byte> <byte> <byte> <byte>

<string> ::= <byte> | <byte> <string>

<byte > =  "\0" .. "ΓΏ"