11
A
回答
18
這是標記生成器的效果:1.__add__(1)
被分成令牌"1."
,"__add__"
,"("
,"1"
,並且")"
,因爲分詞總是試圖建立儘可能長的令牌。第一個標記是一個浮點數,後面跟着一個標識符,這對解析器來說是沒有意義的,所以它會拋出一個SyntaxError
。
簡單地增加點前的空間就會使這項工作:
>>> 1 .__add__(1)
2
2
解析器希望找到一個浮動,但_
不是一個有效的數字。 Parens告訴解析器在1
之後停止解析。
8
因爲1.
是有效的float文字和詞法分析器遵循「最大蒙克」規則 - 最長匹配使用。在1.
作爲浮點文字消耗之後,標識符__add__
和parens跟隨。所有的解析器看到的是<float> <indentifier>
這是無效的(比較1.0 __add__()
,這導致相同的令牌,我希望你看看它是如何是一個語法錯誤)和毫無意義。在第二個例子中,有一個表達式1
包裝在parens中,然後一個點(一個單獨的標記,由解析器作爲屬性訪問運算符拾取)等等,這顯然是有效的。
相關問題
- 1. 爲什麼new [-1]產生段錯誤,而new [-2]產生bad_alloc?
- 2. 爲什麼我會在第1行收到語法錯誤?
- 3. 這段代碼爲什麼會產生語法錯誤?
- 4. 爲什麼此代碼會產生縮進/語法錯誤
- 5. 爲什麼GLSL着色器會產生語法錯誤?
- 6. SSL CONNECT產生-1錯誤
- 7. 語法錯誤(-1)
- 8. 爲什麼會產生以下錯誤?
- 9. 爲什麼SQLite3不會產生錯誤
- 10. Python:爲什麼[0,1,2] [ - 1:1]不會引發錯誤?
- 11. 如何停止Java結果:1錯誤?爲什麼會發生?
- 12. 爲什麼向MySQL查詢添加'*'會導致語法錯誤?
- 13. 爲什麼JavaScript中的0x80000000 >> 1會產生負值?
- 14. 語法錯誤:(1:0)
- 15. BC(standard_in)1:語法錯誤
- 16. 1.錯誤的SQL語法
- 17. (1)近零語法錯誤
- 18. 失敗1:語法錯誤
- 19. android.database.sqlite.SQLiteException:(1)近 「」 語法錯誤
- 20. 爲什麼([「a」,「b」]中的「a」)產生錯誤,並且([1,2]中的1)產生錯誤?
- 21. UITextField添加多於1,隨機產生
- 22. 爲什麼深度爲1的行添加到數組[1]
- 23. 爲什麼這個javascript變量產生語法錯誤?
- 24. 爲什麼添加x + 1跳過10?
- 25. 爲什麼會出現語法錯誤?
- 26. SHA-1在Haskell產生錯誤哈希
- 27. 線程化該方法會產生段錯誤,爲什麼?
- 28. 爲什麼這段代碼會產生「語法錯誤,意外的'='」?
- 29. SQLite錯誤(1):接近「=」:語法錯誤
- 30. SQLiteDatabase錯誤「sqlite:(1)near」(「:語法錯誤
'1 ..__ add __(1)'也可以。 – 2012-02-07 13:50:50
Nope,'1 ..__ add __(1)'返回一個浮點數,而'(1).__ add __(1)'返回一個int值。 – phihag 2012-02-07 13:52:08
我的意思是這不是一個語法錯誤,但是。 – 2012-02-07 13:53:49