gpt4 book ai didi

javascript - Slimit python 缩小器奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 18:48:36 24 4
gpt4 key购买 nike

我正在尝试使用 Python 的“slimit”包缩小一些 javascript。

import slimit
slimit.minify('[1,2,3,4,5,6,7,8]')

运行正常并返回 '[1,2,3,4,5,6,7,8]'

import slimit
slimit.minify('[01,02,03,04,05,06,07,08]')

报错:

SyntaxError: Unexpected token (NUMBER, '8') at 1:23 between LexToken(NUMBER,'0',1,22) and LexToken(RBRACKET,']',1,24)

奇怪的是缩小字符串 [01,02,03,04,05,06,07] 没问题。

Slimit 仅在缩小数组中的 8 个或更多零填充整数时返回错误。

最佳答案

这取决于 slimit 使用的词法分析器。以“0”(但不是“0x”)开头的数字被视为八进制整数。因此,序列“08”以 2 个单独的标记(“0”、“8”)结束,因此出现“意外标记”错误。

注意以下几点:

>>> from slimit import lexer
>>> L = Lexer()
>>> L.input("02")
>>> L.token()
LexToken(NUMBER,'02',1,0)
>>> L.input("08")
>>> L.token()
LexToken(NUMBER,'0',1,0)
>>> L.token()
LexToken(NUMBER,'8',1,1)

寻找 the source对于词法分析器,我们看到用于识别数字的正则表达式:

t_NUMBER = r"""
(?:
0[xX][0-9a-fA-F]+ # hex_integer_literal
| 0[0-7]+ # or octal_integer_literal (spec B.1.1)
| (?: # or decimal_literal
(?:0|[1-9][0-9]*) # decimal_integer_literal
\. # dot
[0-9]* # decimal_digits_opt
(?:[eE][+-]?[0-9]+)? # exponent_part_opt
|
\. # dot
[0-9]+ # decimal_digits
(?:[eE][+-]?[0-9]+)? # exponent_part_opt
|
(?:0|[1-9][0-9]*) # decimal_integer_literal
(?:[eE][+-]?[0-9]+)? # exponent_part_opt
)
)
"""

关于 slimit 应该支持八进制表示还是将其视为普通的 10 进制整数的问题尚待商榷。

JSON 规范明确禁止八进制形式的数字,一些工具会将其标记为无效 JSON(尝试 jsonlint)。来自 RFC 4627 (2.4. Numbers) :

Octal and hex forms are not allowed. Leading zeros are not allowed.

关于javascript - Slimit python 缩小器奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com