C#是否可以识别以0-9以外的数字开头的数字?

时间:2019-04-17 09:34:00

标签: c# unicode

在C#中,如果词汇标记以字母或下划线开头,则识别为标识符或关键字,如果以数字开头,则识别为数字。

在此情况下,字母不限于[A-Za-z];它可以是char.IsLetter可以识别的任何Unicode字母。

[0-9]之外的任何字符是否也被识别为数字,以识别数字文字?

1 个答案:

答案 0 :(得分:2)

答案是否定的,但不仅如此。

如果您查看the language specification,就会明白我的意思:

integer_literal
    : decimal_integer_literal
    | hexadecimal_integer_literal
    ;

decimal_integer_literal
    : decimal_digit+ integer_type_suffix?
    ;

decimal_digit
    : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    ;

integer_type_suffix
    : 'U' | 'u' | 'L' | 'l' | 'UL' | 'Ul' | 'uL' | 'ul' | 'LU' | 'Lu' | 'lU' | 'lu'
    ;

hexadecimal_integer_literal
    : '0x' hex_digit+ integer_type_suffix?
    | '0X' hex_digit+ integer_type_suffix?
    ;

hex_digit
    : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f';

如您所见,+-不是整数文字说明的一部分,因此对于此规则的开始,它始终需要一个数字(0-9十进制整数和0,然后是x(代表十六进制整数)。

规则解析比仅检查第一个字符以确定要遵循的规则要复杂得多。阅读有关ANTLR的前瞻性方法(LL(*))将会学到很多东西。简而言之,整个规则必须解析,否则将无法解析该规则。这不只是基于规则的开始。