我已经制作了扫描仪,现在我应该制作一个解析器。有什么区别?
答案 0 :(得分:21)
扫描程序只是将输入字符串(例如文件)转换为标记列表。这些标记代表标识符,括号,运算符等。
解析器将此令牌列表转换为类似树的对象,以表示令牌如何组合在一起形成一个有凝聚力的整体(有时称为句子)。
就编程语言解析器而言,输出通常称为抽象语法树(AST)。 AST中的每个节点代表语言的不同结构,例如, IF语句是具有2个或3个子节点的节点,CONDITION节点,THEN节点和可能的ELSE节点。
解析器不会给节点带来超出结构内聚的任何意义。接下来要做的是从这个结构中提取意义(有时称为上下文分析)。
答案 1 :(得分:3)
解析(一般意义上讲)是将符号(字符,数字,左括号等)转换为语法句子。
词法分析器(“词法分析器”)将源代码文件中的各个符号解析为标记。从那里,“解析器”正确地将那些整个令牌变成你的语法句子。
换句话说,词法分析器将符号组合成标记,解析器将标记组合成句子。