Whitespace := Space | ASCII_TAB ;
ASCII_TAB := CHR(8) ;
LineComment := '!' CommentCharacter* EndOfLine ;
BlockComment := '(*' ( CommentCharacter | BlockComment | EndOfLine )* '*)' ;
CommentCharacter := Digit | Letter | Whitespace | NonAlphaNumQuotable | '\' | "'" | '"' ;
EndOfLine := ASCII_LF | ASCII_CR ASCII_LF? ;
ASCII_LF := CHR(10) ;
ASCII_CR := CHR(13) ;