lor*_*hog 134 parsing tokenize lexer
我正在寻找"tokenizer","parser"和"lexer"是什么以及它们如何相互关联的明确定义(例如,解析器是否使用了tokenizer,反之亦然)?我需要创建一个程序,将通过c/h源文件来提取数据声明和定义.
我一直在寻找示例,可以找到一些信息,但我真的很难掌握语法规则,解析树和抽象语法树等基础概念以及它们如何相互关联.最终这些概念需要存储在实际程序中,但1)它们看起来像什么,2)是否有共同的实现.
我一直在关注这些主题和程序,如Lex和Yacc维基百科,但从未经历过编译器类(EE专业),我发现很难完全理解正在发生的事情.
Rog*_*mbe 151
标记生成器通常通过查找空格(制表符,空格,换行符)将文本流分解为标记.
词法分析器基本上是一个标记化器,但它通常会为标记附加额外的上下文 - 这个标记是一个数字,该标记是一个字符串文字,另一个标记是一个相等运算符.
解析器从词法分析器获取标记流并将其转换为表示由原始文本表示的(通常)程序的抽象语法树.
最后我查了一下,关于这个主题的最好的书是"编译器:原理,技术和工具",通常被称为"龙书".
小智 14
例:
int x = 1;
Run Code Online (Sandbox Code Playgroud)
词法分析器或分词器将它分成标记'int','x','=','1',';'.
解析器将获取这些令牌并使用它们以某种方式理解:
我会说词法分析器和分词器基本上是一回事,它们将文本粉碎成其组成部分(“标记”)。然后解析器使用语法解释标记。
不过,我不会太拘泥于精确的术语用法——人们经常使用“解析”来描述解释一段文本的任何动作。