【问题标题】:Is the word "lexer" a synonym for the word "parser"?“lexer”这个词是“parser”这个词的同义词吗?
【发布时间】:2011-05-09 18:46:19
【问题描述】:

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

【问题讨论】:

  • 请注意,“lexer”有时也称为“tokenizer”或“scanner”。
  • @Bart 谢谢,我不小心把问题写错了。我的意思是“词法分析器是标记器的同义词”,所以您的评论实际上就是答案。谢谢。

标签: parsing language-agnostic lexer synonym


【解决方案1】:

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

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

通常使用按顺序测试的简单正则表达式规则来描述词法分析器。有诸如lex 之类的工具可以根据这样的描述自动生成词法分析器。

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

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

expr ::= expr Plus expr
       | Number
       | Identifier  

【讨论】:

    【解决方案2】:

    没有。 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"
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        它们是不同的。

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2016-07-27
            • 1970-01-01
            • 2019-02-13
            • 1970-01-01
            • 1970-01-01
            • 2012-03-19
            • 1970-01-01
            • 1970-01-01
            • 2018-09-25
            相关资源
            最近更新 更多