>>> 1 .__hash__()
1
>>> 1.__hash__()
File "<stdin>", line 1
1.__hash__()
^
SyntaxError: invalid syntax
Здесь было рассмотрено, что второй пример не работает, потому что int literal фактически анализируется как float.
Мой вопрос: почему python не анализирует это как доступ к атрибуту в int, когда интерпретация как float является синтаксической ошибкой? В разделе docs на лексическом анализе кажется, что пробел требуется только тогда, когда другие интерпретации неоднозначны, но, возможно, я читаю этот раздел неправильно.
По подозрению в том, что lexer жадный (пытаясь взять самый большой токен), но у меня нет источника для этого требования.