解析器和扫描器之间有什么区别?

时间:2009-11-15 22:55:51

标签: parsing yacc lexical-analysis

我已经制作了扫描仪,现在我应该制作一个解析器。有什么区别?

2 个答案:

答案 0 :(得分:21)

扫描程序只是将输入字符串(例如文件)转换为标记列表。这些标记代表标识符,括号,运算符等。

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

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

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

答案 1 :(得分:3)

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

词法分析器(“词法分析器”)将源代码文件中的各个符号解析为标记。从那里,“解析器”正确地将那些整个令牌变成你的语法句子。

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