Syntax Overview
Backus-Naur form (BNF)
<program> ::= <include-list> <function-declaration> <main-function>
<include-list> ::= <include-statement> | <include-statement> <include-list>
<include-statement> ::= "include" "*" "from" <module> ";" | "include" "(" <import-list> ")" "from" <module> ";"
<module> ::= <identifier>
<import-list> ::= <import-identifier> | <import-identifier> "," <import-list>
<import-identifier> ::= <identifier>
<internal-function> ::= "len()" | "strToInt()" | ...
<function-declaration> ::= "fn" <function-name> "(" <parameter-list> ")" "->" <return-type> <block>
<function-prototype> ::= "fn" <function-name> "(" <parameter-list> ")" "->" <return-type> ";"
<function-name> ::= <identifier>
<parameter-list> ::= <parameter> | <parameter> "," <parameter-list>
<parameter> ::= <identifier> ":" <type>
<return-type> ::= <type>
<type> ::= "Int" | "Char" | "String" | "Bool" | "[" <type> "]" | "Float" | "FnType(" <parameter-list> ")" "->" <return-statement>
<comment> ::= "//" | "/*...*/"
<block> ::= "{" <statement-list> "}"
<statement-list> ::= <statement> | <statement> <statement-list>
<statement> ::= <variable-declaration> | <assignment> | <for-loop> | <print-statement> | <return-statement>
<variable-declaration> ::= <identifier> ":" <type> "=" <expression> ";"
<assignment> ::= <identifier> "=" <expression> ";"
<condition> ::= "if" "(" <expression> ")" <block> | "if" "(" <expression> ")" <block> "else" <block>
<for-loop> ::= <for-loop-iter> | <for-loop-in>
<for-loop-in> ::= "for" "(" <identifier> "in" <expression> ")" <block>
<for-loop-iter> ::= "for" "(" <for-loop-initialization> ";" <for-loop-condition> ";" <for-loop-update> ")" <block>
<for-loop-initialization> ::= <variable-declaration> | <assignment> | <empty>
<for-loop-condition> ::= <expression>
<for-loop-update> ::= <assignment> | <empty>
<return-statement> ::= "return" <expression> ";"
<expression> ::= <term> | <term> <binary-operator> <expression>
<term> ::= <factor> | <factor> <binary-operator> <term>
<factor> ::= <identifier> | <literal> | "(" <expression> ")"
<literal> ::= <number> | <string> | "true" | "false"
<number> ::= <digit>+
<string> ::= '"' <characters> '"'
<characters> ::= <character> | <character> <characters>
<character> ::= (any valid character)
<identifier> ::= (valid identifier)
<binary-operator> ::= "+" | "-" | "*" | "/" | "%" | "==" | "!=" | "&&" | "||" | ...
<syntactic-sugar> ::= "++" | "--" | "+=" | "-=" | "*=" | "/=" | "%=" | ...
<digit> ::= '0' | '1' | '2' | ... | '9'
<empty> ::= epsilonDetails on the BNF
Program Structure
Include Statements
Functions
Data Types
Blocks and Statements
Variables and Assignments
Control Flow
Expressions
Literals
Identifiers
Symbols
Epsilon
Last updated