“lexer”这个词是“解析器”这个词的同义词吗?

时间:2011-05-09 18:46:20

标签: parsing language-agnostic lexer synonym

标题是这样的问题:单词“lexer”和“parser”是同义词,还是它们不同?维基百科似乎可以互换地使用这些词,但英语不是我的母语,所以我无法确定。

5 个答案:

答案 0 :(得分:8)

词法分析器用于将输入拆分为标记,而解析器用于从该标记序列构造抽象语法树。

现在,您可以说令牌只是字符并且直接使用解析器,但是通常只需要一个解析器就可以向前看一个令牌以确定它接下来会做什么。因此,在解析器看到它之前,通常使用词法分析器将输入分成标记。

词法分析器通常使用简单的正则表达式规则来描述,这些规则按顺序进行测试。存在诸如lex之类的工具,它们可以从这样的描述中自动生成词法分析器。

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

另一方面,解析器通常通过指定语法来描述。同样,存在诸如yacc之类的工具,它们可以根据这样的描述生成解析器。

expr ::= expr Plus expr
       | Number
       | Identifier  

答案 1 :(得分:7)

没有。 Lexer将输入流分解为“单词”;解析器发现这些“单词”之间的句法结构。例如,给定输入:

velocity = path / time;

lexer输出是:

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"

答案 2 :(得分:6)

没有。词法分析器将源文本分解为标记,而解析器则适当地解释标记序列。

答案 3 :(得分:3)

他们是不同的。

词法分析器将输入字符流作为输入,并生成标记(也称为“lexemes”)作为输出。

解析器将标记(lexemes)作为输入,并生成(例如)表示语句的抽象语法树。

然而,这两者是相似的,相当多的人(特别是那些从未编写任何类似编译器或解释器的人)将它们视为相同,或者(更常见地)使用“解析器”意思是“lexer”。

答案 4 :(得分:1)

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