在哪里可以学习编写词法分析器的基础知识?


80

我想学习如何编写词法分析器。我的大学课程有一个任务,我们必须编写一个解析器(和一个词法分析器一起使用),但这是在没有指导或反馈的情况下(超出标准)提供给我们的,所以我并没有从中学到太多。

在搜索了此主题之后,我只能找到相当高级的文章,这些文章着重于我认为比我所处的位置要走几步的领域。我想讨论一种为非常简单的语言编写词法分析器的基础知识,我可以以此为基础来研究标记更复杂的语言。

在此阶段,我对最佳实践或优化技术并不真正感兴趣,而宁愿关注重点。有什么好的资源可以帮助我入门?

Answers:


69

基本上有两种主要的方法来编写词法分析器:

  1. 创建一个手写的,在这种情况下,我推荐这个小教程
  2. 使用一些lexer生成器工具,例如lex。在这种情况下,我建议阅读有关所选特定工具的教程。

我也想从LLVM文档中推荐万花筒教程。它贯穿了简单语言的实现,并特别演示了如何编写小型词法分析器。本教程有C ++和Objective Caml版本。

关于该主题的经典教科书是《编译器:原理,技术和工具》,也称为《龙书》。但是,这可能属于“相当高级的书面说明”类别。


4
万花筒教程是真正为我解答了这个问题的部分。
罗伯特·拜尔斯

有关手动编写LL(1)解析器的更多信息,请参见此答案
jchook

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.