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

Set*_*gie 7 language-agnostic parsing synonym lexer

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

ham*_*mar 8

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

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

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

[0-9]+  Number
[A-Z]+  Identifier
+       Plus
Run Code Online (Sandbox Code Playgroud)

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

expr ::= expr Plus expr
       | Number
       | Identifier  
Run Code Online (Sandbox Code Playgroud)


Ama*_*dan 7

不,Lexer将输入流分解为"单词"; 解析器发现这些"单词"之间的句法结构.例如,给定输入:

velocity = path / time;
Run Code Online (Sandbox Code Playgroud)

lexer输出是:

velocity (identifier)
= (assignment operator)
path (identifier)
/ (binary operator)
time (identifier)
; (statement separator)
Run Code Online (Sandbox Code Playgroud)

然后解析器可以建立以下结构:

= (assign)
  lvalue: velocity
  rvalue: result of
    / (division)
      dividend: contents of variable "path"
      divisor: contents of variable "time"
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 6

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