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

neu*_*cer 15 parsing yacc lexical-analysis

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

bar*_*ley 21

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

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

在编程语言解析器方面,输出通常称为抽象语法树(AST).AST中的每个节点表示该语言的不同构造,例如,IF语句将是具有2或3个子节点的节点,CONDITION节点,THEN节点以及可能的ELSE节点.

除了结构内聚之外,解析器不会给节点任何意义.接下来要做的是从这个结构中提取意义(有时称为上下文分析).


Chr*_*son 5

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

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

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