17

我已经做了一个扫描仪,现在我应该做一个解析器。有什么不同?

4

2 回答 2

29

Scanner 只是将输入字符串(比如文件)转换为令牌列表。这些标记代表标识符、括号、运算符等。

解析器将此标记列表转换为树状对象,以表示标记如何组合在一起以形成一个有凝聚力的整体(有时称为句子)。

就编程语言解析器而言,输出通常称为抽象语法树 (AST)。AST 中的每个节点代表语言的不同结构,例如,IF 语句将是具有 2 或 3 个子节点的节点、CONDITION 节点、THEN 节点和可能的 ELSE 节点。

解析器不会赋予节点任何超出结构内聚的意义。接下来要做的是从这个结构中提取意义(有时称为上下文分析)。

于 2009-11-15T23:00:41.043 回答
5

解析(一般意义上)是将符号(字符、数字、左括号等)转换为语法的句子。

词法分析器(“词法分析器”)将源代码文件中的单个符号解析为标记。从那里,“解析器”将这些整个标记转换为您的语法句子。

换句话说,词法分析器将符号组合成标记,解析器将标记组合成句子。

于 2009-11-16T00:47:40.133 回答