我需要實現一個詞法分析器,我需要一個數據結構來保存關鍵字。 我被建議使用散列表來保持關鍵字,一個建議是使用C#哈希表格形式System.Collections。但我有一個問題:使用這個散列表我需要一個鍵和一個項目。我只有關鍵字。我應該使用關鍵字作爲關鍵字還是作爲項目,還是作爲兩者? 由於關鍵字不同,我可以使用其他數據結構,例如二叉樹? 我的真正興趣是:編譯器如何實現這個問題?哪一個是關鍵字,哪個是關鍵字散列表的項目?
0
A
回答
0
一般來說,關鍵字只有語法值,所以在大多數編譯器中,它們只用於選擇合適的語法規則。他們的「價值」就這樣立即消耗掉了。由於他們的身份是唯一有用的信息,因此使用HashSet
比HashMap
更合適。
但是,可能有一組關鍵字在語法上是相同的,形成了實際上枚舉類型。在這種情況下,枚舉值可能是與關鍵字關聯的值。
對於手工構建的詞法分析器,使用哈希集或其他類似的數據結構可能很簡單,但大多數編譯器實際上會將關鍵字和其他詞法記號模式一起編譯爲有限狀態自動機。這允許在詞法掃描期間識別關鍵字,而不需要任何外部數據結構。
無論如何,在幾乎所有語言中,關鍵字集都是固定的,因此使用編譯到詞法掃描程序的高效數據結構是最合適的。例如,代替二叉樹,使用可以二進制搜索的排序後的靜態字符串是合理的。或者,可以使用預建的系統;這幾乎等同於上面提到的有限狀態自動機。
+0
非常感謝您的支持!祝你今天愉快! – user2991856
相關問題
- 1. 哪個關鍵字搜索算法?
- 2. C#類定義 - 哪個關鍵字?
- 3. 這是一個意外的關鍵字
- 4. 哪個字典或散列表的鍵可以是符號表達式?
- 5. 是字典來記錄一個關鍵
- 6. 'value'是一個java關鍵字嗎?
- 7. 檢查的值是一個關鍵字列表
- 8. 關鍵字是正則表達式的散列查找
- 9. 如何查看一個字符串是否包含關鍵字列表中的關鍵字?
- 10. 在一對一關係中哪個表具有外鍵是否有關係?
- 11. 關聯數組的哪個類TypeInfo在D中是關鍵?
- 12. C++:通過關鍵字獲得枚舉值,關鍵字是一個變量
- 13. 從字典的列表轉換一個關鍵字值列出
- 14. 應該在一個關鍵字中搜索一個關鍵字的子字符串是否返回true?
- 15. 關於關鍵字這個
- 16. 在哪個字段中找到關鍵字? SQL搜索
- 17. get_post_meta()的關鍵字是在哪裏定義的?
- 18. 這個關鍵字而不是event.target?
- 19. 是取由字符串鍵的對象是不是一個關鍵的關鍵更快? (GAE/J)
- 20. 如何讀取關鍵字的列表,並把每個關鍵字的末尾
- 21. PHP正則表達式匹配多個關鍵字其中最後一個關鍵字是可選的
- 22. 是'(A)'的關鍵字嗎?
- 23. 是Python中的關鍵字
- 24. excel找到關鍵字,並用另一個關鍵字替換所有列的內容包含此關鍵字
- 25. 在哪裏使用await關鍵字 - C#
- 26. Informatica目標表關鍵字
- 27. 找出哪些是谷歌最受歡迎的關鍵字?
- 28. 檢查是否關鍵字列表是在一條線上
- 29. Solr - 抓取上一個/下一個X關鍵字的關鍵字
- 30. 從關鍵字列表中搜索關鍵字的公式
另請參見[MSDN:HashSet類](http://msdn.microsoft.com/zh-cn/library/bb359438(v = vs.110).aspx) –
xmojmr