F#规范中的字符类

时间:2012-09-22 10:21:10

标签: parsing unicode f#

F#规范在语法中进行了以下定义(第A.1.4.1节):

ident-char :
      letter-char
      digit-char
      connecting-char
      combining-char
      formatting-char
      '
      _

connecting-char定义为

connecting-char : '\Pc'

我相信这意味着connecting-char是满足

的任何字符c
System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) = UnicodeCategory.   ConnectorPunctuation

当您使用_进行测试时,您会得到:

> System.Globalization.CharUnicodeInfo.GetUnicodeCategory('_');;
val it : System.Globalization.UnicodeCategory = ConnectorPunctuation

我认为这意味着_是有效的connecting-char。这提出了一个问题,即为什么_存在特殊情况。

在实际的编译器源代码中,_

没有特殊处理

(来自https://github.com/fsharp/fsharp/blob/master/src/fsharp/lex.fsl),

let ident_char =
    letter
  | connecting_char
  | combining_char
  | formatting_char
  | digit
  | ['\'']

问题是 - 为什么F#规范在ident-char中有_的条目?

1 个答案:

答案 0 :(得分:1)

我希望这可能是出于历史原因(继承自F#在SML中的根源)或明确包含下划线(如典型标识符规则所预期的那样:下划线或字母后跟零或更多下划线或alpha -numeric)。

(但这是推测性的,真正回答为什么不问F#团队?)