parsing - 解析器和扫描器有什么区别?

标签 parsing yacc lexical-analysis

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

最佳答案

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

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

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

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

关于parsing - 解析器和扫描器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739175/

相关文章:

java - HTML Markdown源代码的词法分析器(java)

nlp - 阿拉伯语词形还原和斯坦福 NLP

python - python 中的 XML 解析 : expaterror not well-formed

ios - NSXMLParser,解析xml问题

json - 为什么用 jq 解析返回 null?

parsing - 解析类 C 定义字符串的最有效方法?

c++ - 如何在单独的文件中使用 `yy_scan_string(const char *str)`(由 lex yacc 生成)

parsing - 如何消除 flex & bison 的 'main' 例程,以便我可以将词法分析和解析过程放入库中?

java - 左递归: ANTLR

php - 将简码解析为数组