GUMP Scanner

scanner DataScanner from GumpScanner.'class'
   lex <[ \t\n]+> skip end
   lex <"{"|"}"|","|"false"|"true"> A in
         {self getAtom(A)}
         {self putToken1(A)}
   end
   lex <\'[^\']*\'> S1 S2 in
         {self getString(S1)}
         S2={Reverse {Reverse S1.2}.2}
         {self putToken('atom' {String.toAtom S2})}
   end
   lex <[0-9]+> S in
         {self getString(S)}
         {self putToken('int' {String.toInt S})}
   end
   lex <<EOF>> {self putToken1('EOF')} end
   lex <.> raise unexpectedChar end end
end