id = ([A-Za-z_][A-Za-z0-9_]*)|([:]+);
intconst = [0-9]+;
+realconst = [0-9]+\.[0-9]*;
ws = [\ \t\012];
bo = [^<]+;
<CODE> "@" => (Tokens.AT (yypos, yypos + size yytext));
<CODE> "if" => (Tokens.IF (yypos, yypos + 2));
+<CODE> "then" => (Tokens.THEN (yypos, yypos + 4));
<CODE> "else" => (Tokens.ELSE (yypos, yypos + 4));
<CODE> "foreach" => (Tokens.FOREACH (yypos, yypos + 7));
<CODE> "in" => (Tokens.IN (yypos, yypos + 2));
<CODE> "case" => (Tokens.CASE (yypos, yypos + 4));
<CODE> "as" => (Tokens.AS (yypos, yypos + 2));
+<CODE> "fn" => (Tokens.FN (yypos, yypos + 2));
<CODE> "with" => (Tokens.WITH (yypos, yypos + 4));
<CODE> "open" => (Tokens.OPEN (yypos, yypos + 4));
<CODE> "val" => (Tokens.VAL (yypos, yypos + 3));
<CODE> "ref" => (Tokens.REF (yypos, yypos + 3));
<CODE> "try" => (Tokens.TRY (yypos, yypos + 3));
<CODE> "catch" => (Tokens.CATCH (yypos, yypos + 5));
-<CODE> "or" => (Tokens.ORELSE (yypos, yypos + 5));
-<CODE> "and" => (Tokens.ANDALSO (yypos, yypos + 5));
+<CODE> "or" => (Tokens.ORELSE (yypos, yypos + 2));
+<CODE> "and" => (Tokens.ANDALSO (yypos, yypos + 3));
+<CODE> "switch" => (Tokens.SWITCH (yypos, yypos + 6));
+<CODE> "of" => (Tokens.OF (yypos, yypos + 2));
+<CODE> "=>" => (Tokens.ARROW (yypos, yypos + 2));
+<CODE> "|" => (Tokens.BAR (yypos, yypos + 1));
+<CODE> "do" => (Tokens.DO (yypos, yypos + 2));
+<CODE> "end" => (Tokens.END (yypos, yypos + 3));
+<CODE> "raise" => (Tokens.RAISE (yypos, yypos + 5));
<CODE> "::" => (Tokens.CONS (yypos, yypos + 2));
<CODE> {id} => (Tokens.IDENT (yytext, yypos, yypos + size yytext));
<CODE> {intconst} => (case Int.fromString yytext of
- SOME (x) => Tokens.INT (x, yypos, yypos + size yytext)
- | NONE => (ErrorMsg.error (SOME (yypos, yypos))
- ("Expected number, received: " ^ yytext);
- continue ()));
+ SOME x => Tokens.INT (x, yypos, yypos + size yytext)
+ | NONE => (ErrorMsg.error (SOME (yypos, yypos))
+ ("Expected int, received: " ^ yytext);
+ continue ()));
+<CODE> {realconst} => (case Real.fromString yytext of
+ SOME x => Tokens.REAL (x, yypos, yypos + size yytext)
+ | NONE => (ErrorMsg.error (SOME (yypos, yypos))
+ ("Expected real, received: " ^ yytext);
+ continue ()));
<CODE> "\"" {id} "\"" => (Tokens.STRING (String.substring(yytext, 1, String.size yytext - 2), yypos, yypos + size yytext));