changeset 258 | 03145998190b |
parent 256 | 1fb8d62c88a0 |
child 261 | 358f325f4db6 |
257:ce0f60d0351e | 258:03145998190b |
---|---|
286 "([\"f\", \"o\", \"o\", \" \", \"b\", \"a\", \"r\", \" \", \"f\", \"o\", \"o\"], [])"} |
286 "([\"f\", \"o\", \"o\", \" \", \"b\", \"a\", \"r\", \" \", \"f\", \"o\", \"o\"], [])"} |
287 |
287 |
288 where the function @{ML [index] not_eof in Symbol} ensures that we do not read beyond the |
288 where the function @{ML [index] not_eof in Symbol} ensures that we do not read beyond the |
289 end of the input string (i.e.~stopper symbol). |
289 end of the input string (i.e.~stopper symbol). |
290 |
290 |
291 \indexdef{unless@ {\tt\slshape{unless}}}{in {\tt\slshape Scan}} |
|
292 The function @{ML "Scan.unless p q" for p q} takes two parsers: if the first one can |
291 The function @{ML "Scan.unless p q" for p q} takes two parsers: if the first one can |
293 parse the input, then the whole parser fails; if not, then the second is tried. Therefore |
292 parse the input, then the whole parser fails; if not, then the second is tried. Therefore |
294 |
293 |
295 @{ML_response_fake_both [display,gray] "Scan.unless ($$ \"h\") ($$ \"w\") (Symbol.explode \"hello\")" |
294 @{ML_response_fake_both [display,gray] "Scan.unless ($$ \"h\") ($$ \"w\") (Symbol.explode \"hello\")" |
296 "Exception FAIL raised"} |
295 "Exception FAIL raised"} |