在C#中,如果词汇标记以字母或下划线开头,则识别为标识符或关键字,如果以数字开头,则识别为数字。
在此情况下,字母不限于[A-Za-z]
;它可以是char.IsLetter
可以识别的任何Unicode字母。
[0-9]
之外的任何字符是否也被识别为数字,以识别数字文字?
答案 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(*))将会学到很多东西。简而言之,整个规则必须解析,否则将无法解析该规则。这不只是基于规则的开始。