我正在寻找“标记器”、“解析器”和“词法分析器”是什么以及它们如何相互关联的明确定义(例如,解析器是否使用标记器,反之亦然)?我需要创建一个程序,将通过 c/h 源文件来提取数据声明和定义。
我一直在寻找示例并且可以找到一些信息,但我真的很难掌握语法规则、解析树和抽象语法树等基本概念以及它们如何相互关联。最终这些概念需要存储在一个实际的程序中,但是 1)它们看起来像什么,2)有没有共同的实现。
我一直在查看有关 Lex 和 Yacc 等主题和程序的 Wikipedia,但从未学习过编译器类(EE 专业),我发现很难完全理解发生了什么。
标记器将文本流分解为标记,通常通过查找空格(制表符、空格、换行符)。
词法分析器基本上是一个标记器,但它通常为标记附加额外的上下文——这个标记是一个数字,那个标记是一个字符串文字,这个另一个标记是一个相等运算符。
解析器从词法分析器中获取标记流,并将其转换为表示(通常)由原始文本表示的程序的抽象语法树。
上次我查了一下,关于这个主题的最好的书是“编译器:原理、技术和工具”,通常被称为“龙之书”。