@@ -251,8 +251,10 @@ let lowercase = ['a'-'z' '\223'-'\246' '\248'-'\255' '_']
251251let uppercase = ['A' - 'Z' '\192' - '\214' '\216' - '\222' ]
252252let identchar =
253253 ['A' - 'Z' 'a' - 'z' '_' '\192' - '\214' '\216' - '\246' '\248' - '\255' '\'' ' 0 '-' 9 ']
254+ let constructorchar =
255+ ['$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '@' '^' '|' ]
254256let symbolchar =
255- ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '| ' '~' ]
257+ constructorchar | ['!' '? ' '~' ]
256258let decimal_literal = ['0' - '9' ]+
257259let hex_literal = '0' ['x' 'X' ] ['0' - '9' 'A' - 'F' 'a' - 'f' ]+
258260let oct_literal = '0' ['o' 'O' ] ['0' - '7' ]+
@@ -366,7 +368,6 @@ rule token = parse
366368 | " ." { print (Lexing. lexeme lexbuf) ; token lexbuf }
367369 | " .." { print (Lexing. lexeme lexbuf) ; token lexbuf }
368370 | " :" { print (Lexing. lexeme lexbuf) ; token lexbuf }
369- | " ::" { print (Lexing. lexeme lexbuf) ; token lexbuf }
370371 | " :=" { print (Lexing. lexeme lexbuf) ; token lexbuf }
371372 | " :>" { print (Lexing. lexeme lexbuf) ; token lexbuf }
372373 | " ;" { print (Lexing. lexeme lexbuf) ; token lexbuf }
@@ -407,6 +408,22 @@ rule token = parse
407408 { print (Lexing. lexeme lexbuf) ; token lexbuf }
408409 | ['*' '/' '%' ] symbolchar *
409410 { print (Lexing. lexeme lexbuf) ; token lexbuf }
411+
412+ | ':' ['|' '&' '$' ] constructorchar *
413+ (* := and :> are invalid operators since COLONEQUAL and COLONGREATER already exist.
414+ :< is invalid because [ x:<foo:bar> ] is valid. *)
415+ | ':' ['=' '>' '<' ] constructorchar +
416+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
417+ | ':' ['@' '^' ] constructorchar *
418+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
419+ | " ::" constructorchar *
420+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
421+ | ':' ['+' '-' ] constructorchar *
422+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
423+ | ':' " **" constructorchar *
424+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
425+ | ':' ['*' '/' '%' ] constructorchar *
426+ { print (Lexing. lexeme lexbuf) ; token lexbuf }
410427 | eof { () }
411428 | _
412429 { raise (Error (Illegal_character ((Lexing. lexeme lexbuf).[0 ]),
0 commit comments