我正在做的詞法和語法分析器,以一種數據格式解析到另一個(部分作爲練習),我有一個問題:詞法分析
比方說,我們有3個不同數據類型,以及這些數據類型由它們的分隔符標識:
A | b#我們稱這種類型的「段」
A〜b#我們稱這種類型的「陣「
一個^ B#我們稱這種類型的「組件」
你也可以像這樣將它們混合:
hey~there|how~are~you
這將對應於這樣的僞代碼:
[["hey", "there"], ["how", "are", you"]]
和
hey~there^you~guy|hi|hehe
這將符合:
[[["hey", "there"], ["you", "guy"]], "hi", "hehe"]
現在的問題是,在我的詞法分析器做我向前看,看看我們正在處理的,這樣我可以發出令牌類型什麼類型的數據首先所有的字符串之前分隔符會散發出來?或者,我是否讓解析器試圖通過它獲取的分隔符令牌找出它?
爲hey~there^you~guy|hi|hehe
實施例:
(segment)
(component)
(array)
(string "hey")
(array_delim "~")
(string "there")
(component_delim "^")
(component)
(array)
(string "you")
(array_delim "~")
(string "guy")
(segment_delim "|")
(string "hi")
(segment_delim "|")
(string "hehe")
與
(string "hey")
(array_delim "~")
(string "there")
(component_delim "^")
(string "you")
(array_delim "~")
(string "guy")
(segment_delim "|")
(string "hi")
(segment_delim "|")
(string "hehe")
在第一種情況解析器將知道組件或陣列來了,使提前正確的數據結構。在第二個例子中,它需要回溯它所做的事情,因爲它會找出它以後的數據結構。
在第一種情況下,您需要詞法分析器包含一個單獨的分析器,以及哪種類型的分析具有「分離」步驟的目的。另外,如果你正在使用解析器生成器,那麼第二個選項更容易編寫解析器(更不用說詞法分析器變得更簡單了)。 –