我正在寻找“分词器”、“解析器”和“词法分析器”的明确定义以及它们如何相互关联(例如,解析器是否使用分词器,反之亦然)?我需要创建一个程序将通过 c/h 源文件来提取数据声明和定义。
我一直在寻找示例并且可以找到一些信息,但我真的很难掌握语法规则、解析树和抽象语法树等基本概念以及它们如何相互关联。最终这些概念需要存储在实际的程序中,但是 1) 它们是什么样的,2) 是否有常见的实现。
我一直在查看维基百科上有关这些主题和程序(例如 Lex 和 Yacc)的内容,但从未上过编译器类(class)(EE 主修),我发现很难完全理解正在发生的事情。
最佳答案
分词器通常通过查找空白(制表符、空格、换行符)将文本流分解为标记。
词法分析器基本上是一个记号生成器,但它通常会为记号附加额外的上下文——这个记号是一个数字,那个记号是一个字符串文字,另一个记号是一个相等运算符。
解析器从词法分析器获取标记流,并将其转换为抽象语法树,表示(通常)由原始文本表示的程序。
我上次检查过,关于这个主题的最好的书是 "Compilers: Principles, Techniques, and Tools"通常简称为“龙书”。
关于parsing - 正在寻找 "tokenizer"、 "parser"和 "lexers"的明确定义以及它们如何相互关联和使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380455/