EBNF Grammar for RasmusDSP Scripts
==================================

Script := Statements EOF

Statements := (Statement ';') * 

Statement := '<-' Expression | Identifier '<-' Expression | Expression

Expression := 
        String
      | Identifier     
      | Number
      | Hexnumber
      | Expression '?' Expression ':' Expression
      | Expression ('|' | '&' | '>' ('=')? | '<' ('=')? | '=' | '+' | '-' | '*' | '@' | '^') Expression
      | '(' Expression ')'
      | '-' Expression
      | '!' Expression
      | (Identifier | '(' Expression ')' ) '(' Parameters ')' ( '<-' Expression )?

Parameters     := (Parameter | Parameters ',' Parameter )?
Parameter      := Identifier '=' Expression | Expression
String         := " Char * " | ' Char * '
Number         := Digit + ('.' Digit + )? ('%' +)?  
Digit          :=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
Hexnumber      := '0x' Hexdigit +
Hexdigit       :=  Digit | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' 

Char       is ALL unicode Chars except " and ' 
Identifier is one or more letters, Digits and underscores, 
              and must not start with Digit
EOF        is token returned by scanner at end of file/stream


Comments:
=========

Comments are // to end of line and /* ... */ like Java and C++ commands
/* ... */ comments are not nested !!!


Identifiers:
============
Identifiers are case-insensative unlike Java, but like Basic


