2011-05-09 41 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

据我所知,词法分析器和解析器在意义上是联合的,但不是确切的同义词。虽然许多来源确实使用它们作为类似的词法分析器(词法分析器的缩写)识别与输入语言相关的标记;而解析器确定令牌流是否符合所考虑语言的语法。

相关问题