7

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

4

5 回答 5

8

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

现在,您可以只说标记是简单的字符并直接使用解析器,但通常有一个解析器很方便,它只需要向前看一个标记来确定接下来要做什么。因此,词法分析器通常用于在解析器看到之前将输入划分为标记。

词法分析器通常使用按顺序测试的简单正则表达式规则来描述。有一些工具lex可以从这样的描述中自动生成词法分析器。

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

另一方面,解析器通常通过指定语法来描述。同样,存在yacc可以从这样的描述生成解析器的工具。

expr ::= expr Plus expr
       | Number
       | Identifier  
于 2011-05-09T18:50:07.587 回答
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"
于 2011-05-09T18:50:04.323 回答
6

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

于 2011-05-09T18:49:46.667 回答
3

他们是不同的。

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

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

然而,这两者足够相似,以至于很多人(尤其是那些从未编写过编译器或解释器之类的东西的人)将它们视为相同,或者(更经常)在它们真正的意思是“词法分析器”。

于 2011-05-09T18:50:22.810 回答
1

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

于 2011-05-09T18:52:03.793 回答