- In the first section, replace the first few lines with:
type arg = int
type svalue = Tokens.svalue
type pos = int*int
type ('a,'b) token = ('a,'b) Tokens.token
type lexresult = (svalue,pos) token
-
Add the definition of the make_pos function.
fun make_pos yypos yytext =
( (!lineNum, charPos yypos),
(!lineNum, (charPos yypos) + String.size(yytext) - 1) )
- After the first %%:
%header (functor FunLexFun (structure Tokens: Fun_TOKENS));
-
The token constructors now take objects with type pos*pos where pos
is the new position type (int*int). You can generate these using the
make_pos function. For example:
<INITIAL>fun => (Tokens.FUN(make_pos yypos yytext));
-
Similarly the type of ErrorMsg.error uses the new pos type,
and so you should use make_pos to pass positions to it.