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))))))

08-03 23:43