::= { DeclarationStart } ::= Type Symbol [ ] { Symbol } Assign { VBar } | Struct Symbol { Symbol } Assign { } | Trait Symbol [ ] [ On ] Needs { } | Impl Symbol [ ] On Colon { } | Symbol ::= Symbol { } ::= [ { Comma } Aro ] ::= { } ::= | OpenParen CloseParen ::= Symbol [ OpenSquareBracket CloseSquareBracket ] ::= Int Range Int | Int ::= Dot Symbol Colon ::= OpenSouareBracket { , } CloseSquareBracket ::= Symbol Colon ::= Dot Symbol { Symbol } Assign ::= Colon | { Symbol } Assign ::= { } | If | { } In | ::= Literal | { } | OpenParen CloseParen ::= Symbol { Dot Symbol } ::= Let Symbol Assign ::= Is { Comma } [ Comma ] | Then Else ::= Aro ::= { } ::= { } ::= { } ::= { } ::= { } ::= Mult | Div | Mod ::= Add | Sub ::= Eq | NEq | LessThan | GreaterThan ::= LAnd ::= LOr ::= Symbol | Literal ::= { } | { ::= Dot Symbol Assign