intconst = [0-9]+;
realconst = [0-9]+\.[0-9]*;
ws = [\ \t\012];
-bo = [^<]+;
+bo = [^<\n]+;
%%
-\n => (if isLinCom () then (linComEnd (); YYBEGIN INITIAL) else ();
+<CODE> \n => (if isLinCom () then (linComEnd (); YYBEGIN INITIAL) else ();
lineNum := !lineNum + 1;
linePos := yypos :: ! linePos;
continue ());
+<INITIAL> \n => (lineNum := !lineNum + 1;
+ linePos := yypos :: ! linePos;
+ Tokens.HTML (yytext, yypos, yypos + size yytext));
<INITIAL> {ws}+ => (Tokens.HTML (" ", yypos, yypos + size yytext); lex ());
<CODE> "@" => (Tokens.AT (yypos, yypos + size yytext));
<CODE> "if" => (Tokens.IF (yypos, yypos + 2));
+<CODE> "iff" => (Tokens.IFF (yypos, yypos + 3));
<CODE> "then" => (Tokens.THEN (yypos, yypos + 4));
<CODE> "else" => (Tokens.ELSE (yypos, yypos + 4));
+<CODE> "elseif" => (Tokens.ELSEIF (yypos, yypos + 6));
<CODE> "foreach" => (Tokens.FOREACH (yypos, yypos + 7));
+<CODE> "for" => (Tokens.FOR (yypos, yypos + 3));
<CODE> "in" => (Tokens.IN (yypos, yypos + 2));
<CODE> "case" => (Tokens.CASE (yypos, yypos + 4));
<CODE> "as" => (Tokens.AS (yypos, yypos + 2));
<CODE> "do" => (Tokens.DO (yypos, yypos + 2));
<CODE> "end" => (Tokens.END (yypos, yypos + 3));
<CODE> "raise" => (Tokens.RAISE (yypos, yypos + 5));
+<CODE> "let" => (Tokens.LET (yypos, yypos + 3));
+<CODE> "in" => (Tokens.IN (yypos, yypos + 2));
<CODE> "::" => (Tokens.CONS (yypos, yypos + 2));
+<CODE> "o" => (Tokens.O (yypos, yypos + 1));
<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)