C# Класс Loyc.Syntax.ParseHelpers

Static methods that help with common parsing jobs, such as parsing integers, floats, and strings with C escape sequences.
Показать файл Открыть проект

Открытые методы

Метод Описание
Base36DigitValue ( char c ) : int

Gets the integer value for the specified digit, where 'A' maps to 10 and 'Z' maps to 35, or -1 if the character is not a digit or letter.

HexDigitValue ( char c ) : int

Gets the integer value for the specified hex digit, or -1 if the character is not a hex digit.

SkipSpaces ( UString s ) : UString

Returns a string with any spaces and tabs removed from the beginning.

Only ' ' and '\t' are treated as spaces.

TryParseDouble ( UString &source, int radix, ParseNumberFlag flags ) : double

Parses a string to a double-precision float, returning NaN on failure or an infinity value on overflow.

TryParseFloat ( UString &source, int radix, ParseNumberFlag flags ) : float

Parses a string to a single-precision float, returning NaN on failure or an infinity value on overflow.

TryParseFloatParts ( UString &source, int radix, bool &negative, ulong &mantissa, int &exponentBase2, int &exponentBase10, int &numDigits, ParseNumberFlag flags ) : bool

Parses the parts of a floating-point string. See the other overload for details.

This method is a wrapper around the other overload that combines the 'exponentBaseR' parameter with 'exponentBase2' or 'exponentBase10' depending on the radix. For example, when radix=10, this method adds exponentBaseR to exponentBase10.

TryParseFloatParts ( UString &source, int radix, bool &negative, ulong &mantissa, int &exponentBaseR, int &exponentBase2, int &exponentBase10, int &numDigits, ParseNumberFlag flags ) : bool

Low-level method that identifies the parts of a float literal of arbitrary base (typically base 2, 10, or 16) with no prefix or suffix, such as 2.Cp0 (which means 2.75 in base 16).

The syntax required is ( '+'|'-' )? ( Digits ('.' Digits?)? | '.' Digits ) ( ('p'|'P') ('-'|'+')? DecimalDigits+ )? ( ('e'|'E') ('-'|'+')? DecimalDigits+ )? where Digits refers to one or more digits in the requested base, possibly including underscores or spaces if the flags allow it; similarly, DecimalDigits refers to base-10 digits and is also affected by the flags. Returns false if there was an error interpreting the input. To keep the parser relatively simple, it does not roll back in case of error the way the int parser does. For example, given the input "23p", the 'p' is consumed and causes the method to return false, even though the parse could have been successful if it had ignored the 'p'.

TryParseHex ( UString s, int &value ) : bool

A simple method to parse a sequence of hex digits, without overflow checks or other features supported by methods like TryParseInt(string, ref int, out int, int, bool).

TryParseHex ( UString &s, int &value ) : int

A simple method to parse a sequence of hex digits, without overflow checks or other features supported by methods like TryParseInt(string, ref int, out int, int, bool).

TryParseInt ( UString &s, int &result, int radix = 10, ParseNumberFlag flags ) : bool
TryParseInt ( UString &input, long &result, int radix = 10, ParseNumberFlag flags ) : bool
TryParseInt ( string s, int &index, int &result, int radix = 10, bool skipSpaces = true ) : bool

Tries to parse a string to an integer. Unlike Int32.TryParse(string, out int), this method allows parsing to start at any point in the string, it allows non-numeric data after the number, and it can parse numbers that are not in base 10.

This method never throws. If parsing fails, index is left unchanged, except that spaces are still skipped if you set the skipSpaces flag. If base>36, parsing can succeed but digits above 35 (Z) cannot occur in the output number. If the input number cannot fit in 'result', the return value is false but index increases anyway, and 'result' is a bitwise truncated version of the number. When parsing input such as "12.34", the parser stops and returns true at the dot (with a result of 12 in this case).

TryParseUInt ( UString &s, System.Numerics.BigInteger &result, int radix = 10, ParseNumberFlag flags ) : bool
TryParseUInt ( UString &s, ulong &result, int radix = 10, ParseNumberFlag flags ) : bool

Tries to parse a string to an unsigned integer.

This method never throws. It shrinks the slice s as it parses, so if parsing fails, s[0] will be the character at which parsing fails. If base>36, parsing can succeed but digits above 35 (Z) cannot be represented in the input string. If the number cannot fit in result, the return value is false and the method's exact behavior depends on whether you used ParseNumberFlag.StopBeforeOverflow. When parsing input such as "12.34", the parser stops and returns true at the dot (with a result of 12 in this case).

UnescapeCStyle ( UString s, EscapeC &encountered, bool removeUnnecessaryBackslashes = false ) : StringBuilder

Unescapes a string that uses C-style escape sequences, e.g. "\\\n\\\r" becomes "\n\r".

See UnescapeChar(ref UString, ref EscapeC) for details.

UnescapeCStyle ( UString s, bool removeUnnecessaryBackslashes = false ) : string

Unescapes a string that uses C-style escape sequences, e.g. "\\\n\\\r" becomes "\n\r".

UnescapeChar ( UString &s ) : int
UnescapeChar ( UString &s, EscapeC &encountered ) : int

Unescapes a single character of a string. Returns the first character if it is not a backslash, or \ if it is a backslash but no escape sequence could be discerned.

This function also decodes (non-escaped) surrogate pairs. Code points with 5 or 6 digits such as \u1F4A9 are supported. \x escapes must be two digits and set the EscapeC.BackslashX flag. \u escapes must be 4 to 6 digits. If a \u escape has more than 4 digits, the EscapeC.HasLongEscapes flag is set. Invalid 6-digit escapes like \u123456 are "made valid" by being treated as 5 digits (the largest valid escape is \u10FFFF.) Supported escapes: \u \x \\ \n \r \0 \' \" \` \t \a \b \f \v

UnescapeChar ( string s, int &i ) : int

Приватные методы

Метод Описание
SkipExtraDigits ( UString &s, int radix, ParseNumberFlag flags ) : int
TryParseUInt ( UString &s, System.Numerics.BigInteger &result, int radix, ParseNumberFlag flags, int &numDigits ) : bool
TryParseUInt ( UString &s, ulong &result, int radix, ParseNumberFlag flags, int &numDigits ) : bool

Описание методов

Base36DigitValue() публичный статический Метод

Gets the integer value for the specified digit, where 'A' maps to 10 and 'Z' maps to 35, or -1 if the character is not a digit or letter.
public static Base36DigitValue ( char c ) : int
c char
Результат int

HexDigitValue() публичный статический Метод

Gets the integer value for the specified hex digit, or -1 if the character is not a hex digit.
public static HexDigitValue ( char c ) : int
c char
Результат int

SkipSpaces() публичный статический Метод

Returns a string with any spaces and tabs removed from the beginning.
Only ' ' and '\t' are treated as spaces.
public static SkipSpaces ( UString s ) : UString
s UString
Результат UString

TryParseDouble() публичный статический Метод

Parses a string to a double-precision float, returning NaN on failure or an infinity value on overflow.
public static TryParseDouble ( UString &source, int radix, ParseNumberFlag flags ) : double
source UString
radix int Base of the number to parse; must be 2 (binary), /// 4, 8 (octal), 10 (decimal), 16 (hexadecimal) or 32.
flags ParseNumberFlag Alters parsing behavior, see .
Результат double

TryParseFloat() публичный статический Метод

Parses a string to a single-precision float, returning NaN on failure or an infinity value on overflow.
public static TryParseFloat ( UString &source, int radix, ParseNumberFlag flags ) : float
source UString
radix int Base of the number to parse; must be 2 (binary), /// 4, 8 (octal), 10 (decimal), 16 (hexadecimal) or 32.
flags ParseNumberFlag Alters parsing behavior, see .
Результат float

TryParseFloatParts() публичный статический Метод

Parses the parts of a floating-point string. See the other overload for details.
This method is a wrapper around the other overload that combines the 'exponentBaseR' parameter with 'exponentBase2' or 'exponentBase10' depending on the radix. For example, when radix=10, this method adds exponentBaseR to exponentBase10.
public static TryParseFloatParts ( UString &source, int radix, bool &negative, ulong &mantissa, int &exponentBase2, int &exponentBase10, int &numDigits, ParseNumberFlag flags ) : bool
source UString
radix int Base of the number to parse; must be 2 (binary), /// 4, 8 (octal), 10 (decimal), 16 (hexadecimal) or 32.
negative bool true if the string began with '-'.
mantissa ulong Integer magnitude of the number.
exponentBase2 int Base-2 exponent to apply.
exponentBase10 int Base-10 exponent to apply.
numDigits int Set to the number of digits in the number, not including the exponent part.
flags ParseNumberFlag Alters parsing behavior, see .
Результат bool

TryParseFloatParts() публичный статический Метод

Low-level method that identifies the parts of a float literal of arbitrary base (typically base 2, 10, or 16) with no prefix or suffix, such as 2.Cp0 (which means 2.75 in base 16).
The syntax required is ( '+'|'-' )? ( Digits ('.' Digits?)? | '.' Digits ) ( ('p'|'P') ('-'|'+')? DecimalDigits+ )? ( ('e'|'E') ('-'|'+')? DecimalDigits+ )? where Digits refers to one or more digits in the requested base, possibly including underscores or spaces if the flags allow it; similarly, DecimalDigits refers to base-10 digits and is also affected by the flags. Returns false if there was an error interpreting the input. To keep the parser relatively simple, it does not roll back in case of error the way the int parser does. For example, given the input "23p", the 'p' is consumed and causes the method to return false, even though the parse could have been successful if it had ignored the 'p'.
public static TryParseFloatParts ( UString &source, int radix, bool &negative, ulong &mantissa, int &exponentBaseR, int &exponentBase2, int &exponentBase10, int &numDigits, ParseNumberFlag flags ) : bool
source UString
radix int Base of the number to parse; must be between 2 /// and 36.
negative bool
mantissa ulong Integer magnitude of the number.
exponentBaseR int Base-radix exponent to apply. This number /// is based on the front part of the number only (not including the 'p' or /// 'e' suffix). Negative values represent digits after the decimal point, /// while positive numbers represent 64-bit overflow. For example, if the /// input is 12.3456 with radix=10, the output will be /// mantissa=123456 and exponentBaseR=-4. If the input is /// 0123_4567_89AB_CDEF_1234.5678 with radix=16, the mantissa /// overflows, and the result is mantissa = 0x1234_5678_9ABC_DEF1 /// with exponentBaseR=3.
exponentBase2 int Base-2 exponent to apply, as specified by /// the 'p' suffix, or 0 if there is no 'p' suffix..
exponentBase10 int Base-10 exponent to apply, as specified by /// the 'e' suffix, or 0 if there is no 'e' suffix..
numDigits int Set to the number of digits in the number, not /// including the exponent part.
flags ParseNumberFlag Alters parsing behavior, see .
Результат bool

TryParseHex() публичный статический Метод

A simple method to parse a sequence of hex digits, without overflow checks or other features supported by methods like TryParseInt(string, ref int, out int, int, bool).
public static TryParseHex ( UString s, int &value ) : bool
s UString
value int
Результат bool

TryParseHex() публичный статический Метод

A simple method to parse a sequence of hex digits, without overflow checks or other features supported by methods like TryParseInt(string, ref int, out int, int, bool).
public static TryParseHex ( UString &s, int &value ) : int
s UString
value int
Результат int

TryParseInt() публичный статический Метод

public static TryParseInt ( UString &s, int &result, int radix = 10, ParseNumberFlag flags ) : bool
s UString
result int
radix int
flags ParseNumberFlag
Результат bool

TryParseInt() публичный статический Метод

public static TryParseInt ( UString &input, long &result, int radix = 10, ParseNumberFlag flags ) : bool
input UString
result long
radix int
flags ParseNumberFlag
Результат bool

TryParseInt() публичный статический Метод

Tries to parse a string to an integer. Unlike Int32.TryParse(string, out int), this method allows parsing to start at any point in the string, it allows non-numeric data after the number, and it can parse numbers that are not in base 10.
This method never throws. If parsing fails, index is left unchanged, except that spaces are still skipped if you set the skipSpaces flag. If base>36, parsing can succeed but digits above 35 (Z) cannot occur in the output number. If the input number cannot fit in 'result', the return value is false but index increases anyway, and 'result' is a bitwise truncated version of the number. When parsing input such as "12.34", the parser stops and returns true at the dot (with a result of 12 in this case).
public static TryParseInt ( string s, int &index, int &result, int radix = 10, bool skipSpaces = true ) : bool
s string
index int Location at which to start parsing
result int
radix int Number base, e.g. 10 for decimal and 2 for binary. /// Must be in the range 2 to 36.
skipSpaces bool Whether to skip spaces before parsing. Only /// the ' ' and '\t' characters are treated as spaces. No space is allowed /// between '-' and the digits of a negative number, even with this flag.
Результат bool

TryParseUInt() публичный статический Метод

public static TryParseUInt ( UString &s, System.Numerics.BigInteger &result, int radix = 10, ParseNumberFlag flags ) : bool
s UString
result System.Numerics.BigInteger
radix int
flags ParseNumberFlag
Результат bool

TryParseUInt() публичный статический Метод

Tries to parse a string to an unsigned integer.
This method never throws. It shrinks the slice s as it parses, so if parsing fails, s[0] will be the character at which parsing fails. If base>36, parsing can succeed but digits above 35 (Z) cannot be represented in the input string. If the number cannot fit in result, the return value is false and the method's exact behavior depends on whether you used ParseNumberFlag.StopBeforeOverflow. When parsing input such as "12.34", the parser stops and returns true at the dot (with a result of 12 in this case).
public static TryParseUInt ( UString &s, ulong &result, int radix = 10, ParseNumberFlag flags ) : bool
s UString A slice of a string to be parsed.
result ulong
radix int Number base, e.g. 10 for decimal and 2 for binary. /// Normally in the range 2 to 36.
flags ParseNumberFlag s that affect parsing behavior.
Результат bool

UnescapeCStyle() публичный статический Метод

Unescapes a string that uses C-style escape sequences, e.g. "\\\n\\\r" becomes "\n\r".
See UnescapeChar(ref UString, ref EscapeC) for details.
public static UnescapeCStyle ( UString s, EscapeC &encountered, bool removeUnnecessaryBackslashes = false ) : StringBuilder
s UString
encountered EscapeC Returns information about whether escape /// sequences were encountered, and which categories.
removeUnnecessaryBackslashes bool Causes the backslash before /// an unrecognized escape sequence to be removed, e.g. "\z" => "z".
Результат StringBuilder

UnescapeCStyle() публичный статический Метод

Unescapes a string that uses C-style escape sequences, e.g. "\\\n\\\r" becomes "\n\r".
public static UnescapeCStyle ( UString s, bool removeUnnecessaryBackslashes = false ) : string
s UString
removeUnnecessaryBackslashes bool
Результат string

UnescapeChar() публичный статический Метод

public static UnescapeChar ( UString &s ) : int
s UString
Результат int

UnescapeChar() публичный статический Метод

Unescapes a single character of a string. Returns the first character if it is not a backslash, or \ if it is a backslash but no escape sequence could be discerned.
This function also decodes (non-escaped) surrogate pairs. Code points with 5 or 6 digits such as \u1F4A9 are supported. \x escapes must be two digits and set the EscapeC.BackslashX flag. \u escapes must be 4 to 6 digits. If a \u escape has more than 4 digits, the EscapeC.HasLongEscapes flag is set. Invalid 6-digit escapes like \u123456 are "made valid" by being treated as 5 digits (the largest valid escape is \u10FFFF.) Supported escapes: \u \x \\ \n \r \0 \' \" \` \t \a \b \f \v
public static UnescapeChar ( UString &s, EscapeC &encountered ) : int
s UString Slice of a string to be unescaped. When using a /// ref UString overload of this method, s will be shorter upon /// returning from this method, as the parsed character(s) are clipped /// from the beginning (s.InternalStart is incremented by one /// normally and more than one in case of an escape sequence.)
encountered EscapeC Bits of this parameter are set according /// to which escape sequence is encountered, if any.
Результат int

UnescapeChar() публичный статический Метод

public static UnescapeChar ( string s, int &i ) : int
s string
i int
Результат int