Modules

module

    module:               "module" <identifier> ";" {[extern] global}.
 

global

    global:               function | declaration.
 

Functions

function

    function:             functionheader [ ";" | block ].
 

functionheader

    functionheader:       ["start"] <identifier> ":" paramlist "->" returntype.
 

paramlist

    paramlist:            "void" | paramblock {";" paramblock}.
 

paramblock

    paramblock:           type param {"," param}.
 

param

    param:                {"*"} <identifier> {"[" "]"}.
 

returntype

    returntype:           type {"*"} {"[" "]"}.
 

Blocks and statements

block

    block:                "{" { statement | block } "}".
 

statement

    statement:            "label" <identifier> ";"
   statement:           ";"
   statement:           "break" ";"
   statement:           "continue" ";"
   statement:           expression ";"
   statement:           declarationblock ";"
   statement:           "if" "(" expression ")" block [ "else" block ].
   statement:           "goto" <identifier> ";"
   statement:           "while" "(" expression ")" "do" block
   statement:           "do" block "while" "(" expression ")" ";"
   statement:           "switch" "(" expression ")" "{" { "case" <int_literal> block } "default" block "}"
   statement:           "return" "(" expression ")"

?
";".
 

declarationblock

    declarationblock:     type declaration {"," declaration}.
 

declaration

    local:                {"*"} <identifier> {"[" <int_literal> "]"} [ "=" expression ].
 

Expressions

Assignment

    expression:           logicalor {"=" logicalor expression}.
 

Logical OR

    logicalor:            logicaland {"||" logicaland logicalor}.
 

Logical AND

    logicaland:           bitwiseor {"&&" bitwiseor logicaland}.
 

Bitwise OR

    bitwiseor:            bitwisexor {"|" bitwisexor bitwiseor}.
 

Bitwise XOR

    bitwisexor:           bitwiseand {"^" bitwiseand bitwisexor}.
 

Bitwise AND

    bitwiseand:           equality {"&" equality bitwiseand}.
 

Equality

    equality:             relation {("==" | "!=") relation equality}.
 

Relation

    relation:             shift {("<" | "<=" | ">" | ">=") shift relation}.
 

Bitwise shift

    shift:                addition {("<<" | ">>") addition shift}.
 

Addition/subtraction

    addition:             multiplication {("+" | "-") multiplication addition}
 

Multiplication/division

    multiplication:       unary3 {("*" | "/" | "%") unary3 multiplication}.
 

Unary operations

Reference, indirection and bitwise complement

    unary3:               {("&" | "*" | "~")} unary2.
 

Unary negation, unary plus and logical NOT

    unary2:               {("+" | "-" | "!")} factor.
 

Factor and application

factor

    factor:               <identifier> [application] | immediate | "(" expression ")".
 

application

    application:          "[" expression "]" application | "(" expression {"," expression } ")".
 

Types and immediates

type

    type:                 "bool" | "char" | "float" | "int" | "string".
 

immediate

    immediate:            <boolean_literal> | <char_literal> | <float_literal> | <int_literal> | <string_literal>.