Parsing 什么';解析器和扫描器的区别是什么?

Parsing 什么';解析器和扫描器的区别是什么?,parsing,yacc,lexical-analysis,Parsing,Yacc,Lexical Analysis,我已经做了一个扫描器,现在我应该做一个解析器。区别是什么?扫描器只需将输入字符串(比如文件)转换为令牌列表。这些标记表示标识符、括号、运算符等 解析器将此标记列表转换为树状对象,以表示标记如何组合在一起形成一个内聚整体(有时称为句子) 在编程语言解析器中,输出通常被称为抽象语法树(AST)。AST中的每个节点表示语言的不同结构,例如,IF语句将是一个具有2或3个子节点的节点、一个条件节点、一个THEN节点以及一个可能的ELSE节点 除了结构内聚之外,解析器不会赋予节点任何意义。接下来要做的是从这

我已经做了一个扫描器,现在我应该做一个解析器。区别是什么?

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

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

在编程语言解析器中,输出通常被称为抽象语法树(AST)。AST中的每个节点表示语言的不同结构,例如,IF语句将是一个具有2或3个子节点的节点、一个条件节点、一个THEN节点以及一个可能的ELSE节点

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

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

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


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

我取出
Flex
标记,并将其替换为更通用的
词法分析器
标记,因为StackOverflow上的
Flex
标记引用了Adobe Flex框架。