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. 語法錯誤(-1)
- 6. 爲什麼SQLite3不會產生錯誤
- 7. 爲什麼會產生以下錯誤?
- 8. Python:爲什麼[0,1,2] [ - 1:1]不會引發錯誤?
- 9. 1.錯誤的SQL語法
- 10. 語法錯誤:(1:0)
- 11. android.database.sqlite.SQLiteException:(1)近 「」 語法錯誤
- 12. 爲什麼([「a」,「b」]中的「a」)產生錯誤,並且([1,2]中的1)產生錯誤?
- 13. UITextField添加多於1,隨機產生
- 14. SHA-1在Haskell產生錯誤哈希
- 15. 爲什麼添加x + 1跳過10?
- 16. SQLite錯誤(1):接近「=」:語法錯誤
- 17. SQLiteDatabase錯誤「sqlite:(1)near」(「:語法錯誤
- 18. 線程化該方法會產生段錯誤,爲什麼?
- 19. 爲什麼這段代碼會產生「語法錯誤,意外的'='」?
- 20. 生產語法錯誤
- 21. 爲什麼LR(1)語法不是LALR(1)?
- 22. 爲什麼添加一個CodeIgniter構造函數會產生錯誤500
- 23. 爲什麼在Javascript中添加兩位小數會產生錯誤的結果?
- 24. MYSQL語法錯誤 - 爲什麼會發生這種情況?
- 25. 爲什麼1/0給出錯誤,但1/0.0返回「Inf」?
- 26. 爲什麼[1,[2,3] = [1,[2,3]]
- 27. 爲什麼「1」等於「+1」?
- 28. 爲什麼語法錯誤?
- 29. 爲什麼語法錯誤
- 30. 爲什麼URL.openStream()方法會產生IOException?
'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