【问题标题】:Where can I learn the basics of writing a lexer?我在哪里可以学习编写词法分析器的基础知识?
【发布时间】:2022-01-24 05:57:19
【问题描述】:

我想学习如何编写词法分析器。我的大学课程有一个任务,我们必须编写一个解析器(以及一个词法分析器),但这是给我们的,没有任何指导或反馈(超出了分数),所以我并没有真正从中学到很多东西。

搜索此主题后,我只能找到相当高级的文章,这些文章侧重于我认为比我现在所处的位置领先几步的领域。我想讨论一下为一种非常简单的语言编写词法分析器的基础知识,我可以将其用作研究对更复杂语言进行标记化的基础。

在这个阶段,我对最佳实践或优化技术并不真正感兴趣,而是更喜欢关注基本要素。有哪些好的资源可以帮助我入门?

【问题讨论】:

    标签: language-agnostic lexer compiler-construction


    【解决方案1】:

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

    1. 创建一个手写的,在这种情况下我推荐this small tutorial
    2. 使用一些词法分析器生成器工具,例如lex。在这种情况下,我建议您阅读所选特定工具的教程。

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

    有关该主题的经典教科书是Compilers: Principles, Techniques, and Tools,也称为龙书。然而,这可能属于“相当高级的写作”类别。

    【讨论】:

    • 万花筒教程是真正为我解答了这个问题的部分。
    • 有关手动编写 LL(1) 解析器的更多信息,请参阅this answer
    【解决方案2】:

    Dragon Book 可能是有关该主题的权威指南,尽管它可能有点压倒性。 Language Implementation PatternsProgramming Language Pragmatics 也是很好的资源。

    【讨论】:

    • 龙书+1。在大学时从中学到了很多东西。是的,那里有很多,但如果您真的对编译器设计和实现感兴趣,这是一个很好的资源。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 2011-04-20
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多