2011-05-09 96 views
7

標題是一個問題:單詞「詞法分析器」和「解析器」的同義詞,還是他們不同?似乎維基百科使用這些詞可以互換,但英語不是我的母語,所以我不能確定。單詞「lexer」是單詞「parser」的同義詞嗎?

+1

請注意,「詞法分析器」有時也稱爲「標記器」或「掃描儀」。 – 2011-05-09 18:52:47

+0

@謝謝,我不小心把錯誤寫下來了。我的意思是「詞法分析器是分詞器的同義詞」,所以你的評論其實就是答案。謝謝。 – 2011-05-09 19:00:47

+0

:)不客氣。 – 2011-05-09 19:04:51

回答

7

編號Lexer將輸入流分解爲「單詞」;解析器發現這些「單詞」之間的句法結構。例如,給定輸入:

velocity = path/time; 

詞法分析器輸出是:

velocity (identifier) 
= (assignment operator) 
path (identifier) 
/(binary operator) 
time (identifier) 
; (statement separator) 

然後解析器可以建立以下結構:

= (assign) 
    lvalue: velocity 
    rvalue: result of 
    /(division) 
     dividend: contents of variable "path" 
     divisor: contents of variable "time" 
6

否。詞法分析器將源文本分解爲標記,而解析器則適當地解釋標記序列。

8

詞法分析器被用於分割輸入了轉換爲令牌,而解析器用於從該令牌序列構造抽象語法樹。

現在,您可以說令牌只是字符並直接使用解析器,但通常只需要展望一個令牌以確定接下來要做什麼的解析器通常很方便。因此,在解析器看到它之前,詞法分析器通常用於將輸入劃分爲令牌。

詞法分析器通常使用簡單的正則表達式規則進行描述,這些規則按順序測試。存在諸如lex之類的工具,其可以從這樣的描述中自動生成詞法分析器。

[0-9]+ Number 
[A-Z]+ Identifier 
+  Plus 

解析器,在另一方面,典型地通過指定一個語法說明。此外,還有一些工具,如yacc可以從這樣的描述中生成解析器。

expr ::= expr Plus expr 
     | Number 
     | Identifier 
3

它們不同。

詞法分析器將輸入字符流作爲輸入,並生成令牌(又名「詞法」)作爲輸出。

解析器將令牌(詞位)作爲輸入,並生成(例如)表示語句的抽象語法樹。

然而,這兩者足夠相似,不少人(尤其是那些從來沒有寫過任何類似編譯器或解釋器的人)將它們視爲相同或更常使用「解析器」真正的意思是「詞法分析器」。

1

據我所知,詞法分析器和解析器在意義上是聯合的,但不是確切的同義詞。雖然許多來源確實使用它們作爲類似的詞法分析器(詞法分析器的縮寫)識別與輸入語言相關的標記;而解析器確定令牌流是否符合所考慮語言的語法。

相關問題