List of Import References :
See BOOL
See BTUnion
See Char
See DENOTATION
See Int
See Nat
See Option
See Real
See Seq
See String
SIGNATURE StringScan
$Date: 2010-09-30 18:24:17 +0200 (Do, 30. Sep 2010) $ ($Revision: 616 $)
-- scanning strings IMPORT Nat ONLY nat Option[nat] ONLY option Int ONLY int Option[int] ONLY option Real ONLY real Option[real] ONLY option Char ONLY char Option[char] ONLY option String ONLY string Option[bool] ONLY option BTUnion ONLY union Seq[union] ONLY seq Option[seq] ONLY option Option[denotation] ONLY option FUN scan : string -> option[nat] ** string scan : string -> option[int] ** string scan : string -> option[real] ** string scan : string -> option[char] ** string scan : string -> option[bool] ** string -- scan(s) == ( res , unused rest of string ) -- res is nil, if string is empty or no prefix belongs to the indicated regexp -- res is also nil, if a nat or an int is too large; this behaviour will be -- implemented for reals also -- nat: {{ 0 || 1 ... || 9 }} -- int: [[ - ]] {{ 0 || 1 ... || 9 }} -- real: [[ + || - ]] {{ 0 || 1 ... || 9 }} . {{ 0 || 1 ... || 9 }} [[ e -- [-] {{ 0 || 1 ... || 9 }} ]] -- char: "any char" -- bool: t || tr || tru || true || T || TR || TRU || TRUE || 1 || -- f || fa || fal || fals || false || F || FA || FAL || FALS || FALSE -- || 0 FUN scan : denotation**string->seq[union] -- convert string (2nd argument) under the control of format -- as far as possible, and return sequence of converted values. -- scan is similar to scanf; the type descriptors -- are as above. FUN scan : denotation**string->seq[union]**string -- same as above, but additionally return unscanned rest of -- string FUN scan : denotation**string -> seq[union]**denotation**string -- same as above, but additionally return unused rest of format FUN scan : denotation ** string -> option[seq[union]] -- as first variant, return nil, if not both arguments are -- fully used /* The format string is parsed according to the following syntax: <format> ::= {{ <formatEl }} <formatEl> ::= <char> || % [[ * ]] [[ <len> ]] <type> % % || <whitespace> <char> ::= <any character> <whitespace> ::= space tab newline <len> ::= {{ 0 || .. || 9 }} "no leading zeros" <type> ::= n "nat"|| i "int" || r "real" || s "string" || c "char" || [ [[ ^ ]] {{ <range> }} "set" ] || b "bool" || d "denotation" <range> ::= <char> || <char> - <char> <whitespace> in the format string is ignored. * a single character must match the first character of the input after skipping whitespace * if * is given after %, the parsed value is not appended to the seq[union] * if <len> is given, a maximum of <len> characters will be read * note, that all of the following may match the empty string * scanning terminates if scanning a nat or an int would yield an unrepresentable number (i.e. > max'Nat/Int or < min'Int) the whole number and the associated format are returned in the rest of the string and the rest of the format string result pair/triple this behaviour will be implemented for reals also ** scanning of nat *** skip <whitespace> in the input *** scan according to regexp {{ 0 || 1 || .. || 9 }} until maximum field width is reached or the first non matching character is reached *** put number as nat() at the end of seq[union] ** scanning of int *** skip <whitespace> in the input *** scan according to regexp [[ - ]] {{ 0 || 1 || .. || 9 }} until maximum field width is reached or the first non matching character is reached *** put number as int() at the end of seq[union] ** scanning of real *** skip <whitespace> in the input *** scan according to regexp [[ + || - ]] {{ 0 || 1 ... || 9 }} . {{ 0 || 1 ... || 9 }} [[ e [-] {{ 0 || 1 ... || 9 }} ]] until maximum field width is reached or the first non matching character is reached *** put number as real() at the end of seq[union] ** scanning of string or denotation *** skip <whitespace> *** scan non <whitespace> characters until maximum field width is reached or non <whitespace> character is encountered *** put string as string() at the end of seq[union] ** scanning of char *** DO NOT SKIP <whitespace> *** assume default maximum field width of 1 *** scan <fieldwidth> characters *** !!! if fieldwidth is not given or given as 1, char() is appended to union, otherwise string() !!! ** scanning of set *** DO NOT SKIP <whitespace> *** scan matching characters until <fieldwidth> is reached or a non matching character is encountered *** put characters as string() the end of seq[union] *** set is a sequence of <range> enclosed in [ ] *** if seqence of <range> is prepended by ^, characters match if they do not belong to one of the given ranges *** if ] is the first char after [ or [^ it is interpreted as a <range> and not as terminating the set ** scanning of bool *** skip <whitespace> *** t, tr, tru, true, T, TR, TRU, TRUE, 1 scan as value "true" *** f, fa, fal, fals, false, F, FA, FAL, FALS, FALSE, 0 scan as value "false" */
next node: BTUnion,
prev node: StringFormat,
up to node: Subsystem String Formatting And Scanning