1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-06-30 21:29:36 +00:00
millfork/doc/lang/syntax.md
2018-01-18 22:35:25 +01:00

2.8 KiB
Raw Blame History

Syntax

For information about types, see Types.
For information about literals, see Literals.
For information about assembly, see Using assembly within Millfork programs.

Comments

Comments start with // and last until the end of line.

Declarations

Variable declarations

A variable declaration can happen at either top level of a file (global variables), or a top level of a function (local variables).

Syntax:

[<storage>] <type> <name> [@<address>] [= <initial_value>]

  • <storage> can be only specified for local variables. It can be either stack, static or nothing. See the description of variable storage.

  • <address> is a constant expression that defines where in the memory the variable will be located. If not specified, it will be located according to the usual allocation rules. stack variables cannot have a defined address.

  • <initial_value> is a constant expression that contains the initial value of the variable. Only global variables can be initialized that way. The behaviour is undefined when targeting a ROM-based platform.

Constant declarations

const <type> <name> = <value>

TODO

Array declarations

An array is a continuous sequence of bytes in memory.

Syntax:

array <name> [[<size>]] [@<address>] [= <initial_values>]

TODO

Function declarations

A function can be declared at the top level. For more details, see Functions

import statements

TODO

Statements

Expression statement

TODO

if statement

Syntax:

if <expression> {
    <body>
}
if <expression> {
    <body>
} else {
    <body>
}

while and do-while statements

Syntax:

while <expression> {
    <body>
}
do {
    <body>
} while <expression>

for statements

Warning: for loops are a bit buggy.

Syntax:

for <variable>,<start>,<direction>,<end> {
}
  • <variable> an already defined numeric variable

  • <direction> the range to traverse:

    • to from <start> inclusive to <end> inclusive, in ascending order (e.g. 0,to,9 to traverse 0, 1,... 9)

    • downto from <start> inclusive to <end> inclusive, in descending order (e.g. 9,downto,0 to traverse 9, 8,... 0)

    • until from <start> inclusive to <end> exclusive, in ascending order (e.g. 0,until,10 to traverse 0, 1,... 9)

    • parallelto the same as to, but the iterations may be executed in any order

    • paralleluntil the same as until, but the iterations may be executed in any order

    There is no paralleldownto, because it would do the same as parallelto.

asm statements

See Using assembly within Millfork programs.