Grammar Rules
1.Program Structure
<program> ::= { <declaration> }*
2.Declarations:
<declaration> ::= <function-definition> | <pointer-definition> | <import-statement>
3.Function Definition:
<function-definition> ::= "funk" <function-name> "(" [ <parameter-list> ] ")" ":" <return-type> "{" <statement>* "}"
4.Parameter List:
<parameter-list> ::= <parameter> { "," <parameter> }*
5.Parameter:
<parameter> ::= <variable-name> ":" <data-type>
6.Pointer Definition:
<pointer-definition> ::= "var" <variable-name> ":" "*" <data-type> "=" "&" <variable-name> ";"
7.Import Statement:
<import-statement> ::= "include" <string-literal> ";"
8.Expressions:
<expression> ::= <variable-name> | <literal> | <binary-operation> | <unary-operation> | "(" <expression> ")"
9.Binary Operation:
<binary-operation> ::= <expression> <binary-operator> <expression>
10.Unary Operation:
<unary-operation> ::= <unary-operator> <expression>
11.Variables:
<pointer> ::= "*" <variable-name>
12.Pointers:
<pointer> ::= "*" <variable-name>
13.Data Types:
<data-type> ::= "i8" | "u8" | "i16" | "u16" | "i32" | "u32" | "i64" | "u64" | "f32" | "f64"