# Tokenizer DIGIT = [0-9] ID = [a-zA-Z_] CHAR = ... \ '"' PITCH = 'c' | 'd' | 'e' | 'f' | 'g' | 'a' | 'h' PITCH_MODIFIER = 'b' | '#' ::= '-' DIGIT+ | DIGIT+ ::= '"' CHAR* '"' ::= '@' PITCH PITCH_MODIFIER? DIGIT? [':' DIGIT+ 'd'?]? ::= ID [ID|DIGIT]* ::= 'integer' | 'string' | 'note' | 'list' | 'void' # Parser ::= | ::= | ::= | ::= | '=' | | ::= | ::= | ::= '.' | '.' ::= '*' ::= | | | | ::= ::= '[' ']' | '[' ::= ', ' | ']' ::= '(' ')' | '(' ::= ', ' | ')' ::= '(' ')' | '(' ::= ', ' | ')' = ? '...'? | '...'? ::= ? ::= '{' '}' | '{' ::= ', ' | ']' ::= '->' | '->' | '->' ::= '<' '>' | '<' ::= ', ' | '>' ::= * ::= '{' * '}' ::= ::= 'return' ::= ::= 'function' ::= 'extend' 'as' '{' '}' ::= 'import' | 'import' 'from' 'as' ::= | | | | ::= *