Format Readme.

This commit is contained in:
Erik Stenman 2019-03-01 12:08:39 +01:00
parent cdccd1ade9
commit ef7c5750a4

117
README.md
View File

@ -1,17 +1,13 @@
# aebytecode # aebytecode
=====
An library and stand alone assembler for aeternity bytecode. An library and stand alone assembler for aeternity bytecode.
This version supports Aevm bytecode and Fate bytecode. This version supports Aevm bytecode and Fate bytecode.
## Build ## Build
-----
$ make $ make
## Fate Code ## Fate Code
---------
Fate code exists in 3 formats: Fate code exists in 3 formats:
@ -29,64 +25,69 @@ The internal format is described in a separate document.
The text representation is described below. The text representation is described below.
### Fate Assembler Code ### Fate Assembler Code
-------------------
Assembler code can be read from a file. Assembler code can be read from a file.
The assembler has the following format: The assembler has the following format:
Comments start with 2 semicolons and runs till end of line Comments start with 2 semicolons and runs till end of line
`;; This is a comment` `;; This is a comment`
Opcode mnemonics start with an upper case letter.
`DUP`
Identifiers start with a lower case letter
`an_identifier`
References to function arguments start with arg followed by an integer
`arg0`
References to variables/registers start with var followed by an integer
`var0`
References to stack postions is either a (for stack 0)
or start with stack followed by an integer
`stack1`
`a`
Immediate values can be of 9 types: Opcode mnemonics start with an upper case letter.
1a. Integers as decimals: {Digits} or -{Digits} `DUP`
`42`
`-2374683271468723648732648736498712634876147`
1b. Integers as Hexadecimals:: 0x{Hexdigits}
`0x0deadbeef0`
2. addresses, a base58 encoded string starting with #{base58char}
followed by up to 64 hex chars
`#nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv`
3. Boolean true or false
`true`
`false`
4. Strings "{Characters}"
`"Hello"`
5. Map { Key => Value }
`{}`
`{ 1 => { "foo" => true, "bar" => false}`
6. Lists [ Elements ]
`[]`
`[1, 2]`
7. Bit field < Bits > or !< Bits >
`<000>`
`<1010 1010>`
`<>`
`!<>`
8. Tuples ( Elements )
`()`
`(1, "foo")`
9. Varaiants: (| Size | Tag | ( Elements ) |)
`(| 42 | 12 | ( "foo", 12) |)`
Where Digits: [0123456789] Identifiers start with a lower case letter
Hexdigits: [0123456789abcdef] `an_identifier`
base58char: [123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]
Characters any printable ascii character 0..255 (except " no quoting yet) References to function arguments start with arg followed by an integer
Key: any value except for a map `arg0`
Bits: 01 or space
Elements: Nothing or Value , Elements References to variables/registers start with var followed by an integer
Size: Digits `var0`
Tag: Digits
References to stack postions is either a (for stack 0)
or start with stack followed by an integer
`stack1`
`a`
Immediate values can be of 9 types:
1a. Integers as decimals: {Digits} or -{Digits}
`42`
`-2374683271468723648732648736498712634876147`
1b. Integers as Hexadecimals:: 0x{Hexdigits}
`0x0deadbeef0`
2. addresses, a base58 encoded string starting with #{base58char}
followed by up to 64 hex chars
`#nv5B93FPzRHrGNmMdTDfGdd5xGZvep3MVSpJqzcQmMp59bBCv`
3. Boolean true or false
`true`
`false`
4. Strings "{Characters}"
`"Hello"`
5. Map { Key => Value }
`{}`
`{ 1 => { "foo" => true, "bar" => false}`
6. Lists [ Elements ]
`[]`
`[1, 2]`
7. Bit field < Bits > or !< Bits >
`<000>`
`<1010 1010>`
`<>`
`!<>`
8. Tuples ( Elements )
`()`
`(1, "foo")`
9. Varaiants: (| Size | Tag | ( Elements ) |)
`(| 42 | 12 | ( "foo", 12) |)`
Where
Digits: [0123456789]
Hexdigits: [0123456789abcdef]
base58char: [123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]
Characters any printable ascii character 0..255 (except " no quoting yet)
Key: any value except for a map
Bits: 01 or space
Elements: Nothing or Value , Elements
Size: Digits
Tag: Digits