2009-11-15 72 views
14

我已經做了一個掃描儀,現在我應該做一個解析器。有什麼不同?解析器和掃描儀有什麼區別?

+2

由於StackOverflow上的Flex標籤引用了Adobe Flex框架,我拿出了'Flex'標籤並用更通用的'lexical-analyser'標籤替換了它。 – 2009-11-15 23:02:23

回答

17

掃描儀只是簡單地將輸入字符串(比如文件)轉換爲令牌列表。這些令牌表示標識符,圓括號,運算符等。

解析器將此列表標記轉換爲樹狀對象,以表示標記如何組合在一起形成一個有凝聚力的整體(有時稱爲句子)。

在編程語言解析器方面,輸出通常被稱爲抽象語法樹(AST)。 AST中的每個節點表示該語言的不同結構,例如,一個IF語句將是一個包含2或3個子節點的節點,一個CONDITION節點,一個THEN節點和一個ELSE節點。

解析器不會給結點超出結構內聚的任何意義。接下來要做的是從這個結構中提取意義(有時稱爲上下文分析)。

2

解析(一般意義上的)是關於將符號(字符,數字,左對齊等)轉換爲語法句子。

詞法分析器(「詞法分析器」)將源代碼文件中的各個符號解析爲標記。從那裏,「解析器」正確地將這些整個標記轉換成語法句子。換言之,詞法分析器將符號組合成標記,分析器將標記組合成句子。