1

In EMCA262 version 5.1 the definition of a hexadecimal integer literal is: (document page 20, PDF page 32)

HexIntegerLiteral ::
    0xHexDigit
    0XHexDigit
    HexIntegerLiteral HexDigit

HexDigit :: one of
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

The way I understand it an HIL can look like this:

(HIL (HIL (HIL (HIL (HIL (HIL HD))))))

An HIL can look like 0x0 (that is 0x and a Hex Digit) and an HD can be 0, so an HIL can be 0x00x00x00x00x00

Obviously no implementation works like this, so I'm clearly misunderstanding something. How should I interpret (in my mind) this recursive definition?

4

2 回答 2

2

定义可能是递归的,但它不是那样工作的。基本上,它说 HexIntegerLiteral 是以下之一:

  • 不区分大小写的前缀0x后跟一个十六进制数字,或
  • 一个 HexIntegerLiteral 后跟一个十六进制数字

0x00x00不遵循这个定义。原因如下:

0x0

这显然是第一次制作的 HIL。

0x00

这也是第二个产生式的 HIL:HIL 0x0(如上所述)后跟 hex digit 0

0x00x

这不是 HIL,因为:

  1. 这显然不是第一次生产的结果
  2. 它也不是第二个产生的结果:0x00从上面建立的 HIL 后面跟着一个不是十六进制数字的东西。

换句话说,上面的语法不允许这样:

(HIL (HIL (HIL (HIL (HIL (HIL HD))))))

它允许的是:

(HIL (HD (HD (HD (HD (HD))))))
于 2013-04-28T16:07:41.423 回答
1

HexIntegerLiteral 被定义为0X0X后跟其中之一0-F,例如...

//  vv----`0x`
    0x5
//    ^---Hex Digit

...或HexIntegerLiteral后跟其中之一0-F,例如...

//  vvv----HexIntegerLiteral
    0x54
//     ^---Hex Digit

...或者...

//  vvvv----HexIntegerLiteral
    0x546
//      ^---Hex Digit

如果你向后工作,它可能看起来更清楚。

于 2013-04-28T16:13:16.613 回答