Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/cm/parse/cm.lex
ViewVC logotype

Diff of /sml/trunk/src/cm/parse/cm.lex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 265, Fri May 7 08:42:54 1999 UTC revision 266, Sat May 8 04:00:44 1999 UTC
# Line 9  Line 9 
9  type lexarg = {  type lexarg = {
10                 enterC: unit -> unit,                 enterC: unit -> unit,
11                 leaveC: unit -> bool,                 leaveC: unit -> bool,
12                 newS: pos -> unit,                 newS: pos * string -> unit,
13                 addS: char -> unit,                 addS: char -> unit,
14                 addSC: string * int -> unit,                 addSC: string * int -> unit,
15                 addSN: string * pos -> unit,                 addSN: string * pos -> unit,
16                 getS: pos -> lexresult,                 getS: pos * (string * pos * pos -> lexresult) -> lexresult,
17                 handleEof: unit -> lexresult,                 handleEof: unit -> lexresult,
18                 newline: pos -> unit,                 newline: pos -> unit,
19                 error: pos -> string -> unit                 error: pos -> string -> unit
# Line 107  Line 107 
107         +------> M -> MC         +------> M -> MC
108         |         |
109         +------> S -> SS         +------> S -> SS
110           |
111           +------> ES -> E
112    
113     "C"  -- COMMENT     "C"  -- COMMENT
114     "P"  -- PREPROC     "P"  -- PREPROC
115     "M"  -- MLSYMBOL     "M"  -- MLSYMBOL
116     "S"  -- STRING     "S"  -- STRING
117     "SS" -- STRINGSKIP     "SS" -- STRINGSKIP
118       "ES" -- ERRORSTART
119       "E"  -- ERROR
120  *)  *)
121    
122  %%  %%
123    
124  %s C P PC PM PMC M MC S SS;  %s C P PC PM PMC M MC S SS E ES;
125    
126  %header(functor CMLexFun (structure Tokens: CM_TOKENS));  %header(functor CMLexFun (structure Tokens: CM_TOKENS));
127    
# Line 160  Line 164 
164  <INITIAL,P,PM,M>"*)"    => (error yypos "unmatched comment delimiter";  <INITIAL,P,PM,M>"*)"    => (error yypos "unmatched comment delimiter";
165                              continue ());                              continue ());
166    
167  <INITIAL>"\""           => (YYBEGIN S; newS yypos; continue ());  <INITIAL>"\""           => (YYBEGIN S; newS (yypos, "string"); continue ());
168    
169  <S>"\\a"                => (addS #"\a"; continue ());  <S>"\\a"                => (addS #"\a"; continue ());
170  <S>"\\b"                => (addS #"\b"; continue ());  <S>"\\b"                => (addS #"\b"; continue ());
# Line 191  Line 195 
195                               ("illegal escape character in string " ^ yytext);                               ("illegal escape character in string " ^ yytext);
196                              continue ());                              continue ());
197    
198  <S>"\""                 => (YYBEGIN INITIAL; getS yypos);  <S>"\""                 => (YYBEGIN INITIAL; getS (yypos, Tokens.FILE_NATIVE));
199  <S>{eol}                => (newline yypos;  <S>{eol}                => (newline yypos;
200                              error yypos "illegal linebreak in string";                              error yypos "illegal linebreak in string";
201                              continue ());                              continue ());
# Line 248  Line 252 
252                                        newline yypos;                                        newline yypos;
253                                        Tokens.ENDIF (yypos,                                        Tokens.ENDIF (yypos,
254                                                      yypos + size yytext));                                                      yypos + size yytext));
255    <INITIAL>{eol}{sharp}{ws}*"error" => (YYBEGIN ES; newline yypos;
256                                          newS (yypos, "error"); continue ());
257    <ES>{ws}+               => (continue ());
258    <ES>{eol}               => (YYBEGIN INITIAL; newline yypos;
259                                getS (yypos, Tokens.ERROR));
260    <ES>.                   => (YYBEGIN E;
261                                addS (String.sub (yytext, 0)); continue ());
262    <E>{eol}                => (YYBEGIN INITIAL; newline yypos;
263                                getS (yypos, Tokens.ERROR));
264    <E>.                    => (addS (String.sub (yytext, 0)); continue ());
265    
266  <INITIAL,M,PM>{eol}     => (newline yypos; continue ());  <INITIAL,M,PM>{eol}     => (newline yypos; continue ());
267  <P>{eol}                => (YYBEGIN INITIAL; newline yypos; continue ());  <P>{eol}                => (YYBEGIN INITIAL; newline yypos; continue ());

Legend:
Removed from v.265  
changed lines
  Added in v.266

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0