parsing - 正在寻找 "tokenizer"、 "parser"和 "lexers"的明确定义以及它们如何相互关联和使用?

标签 parsing lexer tokenize

我正在寻找“分词器”、“解析器”和“词法分析器”的明确定义以及它们如何相互关联(例如,解析器是否使用分词器,反之亦然)?我需要创建一个程序将通过 c/h 源文件来提取数据声明和定义。

我一直在寻找示例并且可以找到一些信息,但我真的很难掌握语法规则、解析树和抽象语法树等基本概念以及它们如何相互关联。最终这些概念需要存储在实际的程序中,但是 1) 它们是什么样的,2) 是否有常见的实现。

我一直在查看维基百科上有关这些主题和程序(例如 Lex 和 Yacc)的内容,但从未上过编译器类(class)(EE 主修),我发现很难完全理解正在发生的事情。

最佳答案

分词器通常通过查找空白(制表符、空格、换行符)将文本流分解为标记。

词法分析器基本上是一个记号生成器,但它通常会为记号附加额外的上下文——这个记号是一个数字,那个记号是一个字符串文字,另一个记号是一个相等运算符。

解析器从词法分析器获取标记流,并将其转换为抽象语法树,表示(通常)由原始文本表示的程序。

我上次检查过,关于这个主题的最好的书是 "Compilers: Principles, Techniques, and Tools"通常简称为“龙书”。

关于parsing - 正在寻找 "tokenizer"、 "parser"和 "lexers"的明确定义以及它们如何相互关联和使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380455/

相关文章:

java - 解析维基媒体标记——基于 EBNF 的解析器不适合吗?

parsing - Elm 解析器无法返回大括号内的字符串

parsing - 我将如何着手实现一种简单的基于堆栈的编程语言

python - 修改 python nltk.word_tokenize 以排除 "#"作为分隔符

c# - 为什么 Roslyn 每种语言都有两个版本的语法?

json - 如果嵌套内容使用动态键,我如何在 GoLang 中解析 JSON?

python - 在 python 中为新的编程语言编写词法分析器

具有冲突标记的 ANTLR 行为

c++ - 如何用百分比标记字符串?

regex - 正则表达式/"regular expression"中的正则是什么意思?