在EMCA262 version 5.1中,十六进制整数文字的定义是:(文档第20页,PDF第32页)
HexIntegerLiteral ::
0x
HexDigit
0X
HexDigit
HexIntegerLiteral HexDigit
HexDigit ::其中之一
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
我对HIL的理解如下:
(HIL(HIL(HIL(HIL(HIL(HIL HD))))))
HIL看起来像0x0
(即0x
和十六进制数字),而HD可以是0
,因此HIL可以是0x00x00x00x00x00
显然,没有实现可以像这样,所以我显然误会了一些东西。我应该如何解释(在我看来)这个递归定义?
最佳答案
该定义可能是递归的,但并非如此。基本上,它说HexIntegerLiteral是以下之一:
不区分大小写的前缀0x
后跟一个十六进制数字,或者
HexIntegerLiteral,后跟一个十六进制数字0x00x00
不遵循此定义。原因如下:0x0
显然,这是第一次生产时的HIL。0x00
这也是第二个产生的HIL:HIL 0x0
(在上面建立)后跟十六进制数字0
。0x00x
这不是HIL,因为:
显然不是第一次生产的结果
这也不是第二次生成的结果:从上方建立的HIL 0x00
后面紧跟一个十六进制数字。
换句话说,以上语法不允许这样做:
(HIL (HIL (HIL (HIL (HIL (HIL HD))))))
它允许的是:
(HIL (HD (HD (HD (HD (HD))))))