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

2024-04-19

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

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

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


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

  1. 创建一个手写的,在这种情况下我推荐这个小教程 http://stlab.cc/legacy/how-to-write-a-simple-lexical-analyzer-or-parser.html.
  2. 使用一些词法分析器生成工具,例如lex http://en.wikipedia.org/wiki/Lex_%28software%29。在这种情况下,我建议阅读所选特定工具的教程。

另外我还想推荐一下万花筒教程 https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html来自LLVM http://llvm.org/文档。它贯穿了一种简单语言的实现,特别演示了如何编写一个小型词法分析器。本教程有 C++ 和 Objective Caml 版本。

关于该主题的经典教科书是编译器:原理、技术和工具 http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools又称龙书。然而,这可能属于“相当高级的文章”类别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 这是 VB.NET 编译器中的错误还是设计造成的?

    我发现 C 和 VB 编译器之间的重载解析存在差异 我不确定这是错误还是设计使然 Public Class Class1 Public Sub ThisBreaks These work Foo Of String Function Str
  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • 是否有使用严格求值的 Haskell 编译器或预处理器?

    我正在寻找一个默认使用严格求值而不是惰性求值的 Haskell 编译器 我只想使用 OCaml 但 Haskell 的语法是好多了比 OCaml 的 Haskell 是纯粹的 并且具有很酷的功能 例如类型类 我真的不想经常把 s and 我
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 正则表达式:忽略大小写

    如何使以下正则表达式忽略大小写 它应该匹配所有正确的字符 但忽略它们是小写还是大写 G a b 假设你想要whole正则表达式忽略大小写 你应该寻找i flag http www regular expressions info modif
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 适用于 Windows 的 C++11 编译器

    我刚刚在 Channel9 上看了一些视频 我发现 lambda 之类的东西真的很酷 当我尝试复制该示例时 它失败了 auto也没用 我正在使用诺基亚的 qtcreator 它随 gcc 4 4 0 一起提供 我想知道哪个编译器实现了有趣的
  • Go1编译器如何工作?

    我在一个学校项目中接触 Go 大约一个月了 我注意到 src pkg go 文件夹中的 go ast go token go parser 等包 但是 gc 编译器基于位于 src cmd gc 中的 C 文件 我的问题是关于 Go1 中用
  • 导致堆栈溢出的最短代码是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无扫描器解析器生成器

    序幕 尽管解析器 上下文无关语法 识别的语言集严格大于扫描器 常规语法 识别的语言集 但大多数解析器生成器都需要扫描器 请不要试图解释其背后的原因 我很了解它们 我见过解析器 不需要像这样的扫描仪 Elkhound http scottmc
  • 如何在代码生成过程中简化包含变量的 C 风格算术表达式?

    我正在尝试优化编译器中的表达式求值 算术表达式都是C风格的 并且它们可以包含变量 我希望尽可能简化表达 例如 3 100 A B 100 3 100可以简化为409 300 A B 主要取决于分配律 结合律和交换律 我遇到的主要困难是如何将
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 实现词法分析器时,DFA 与正则表达式?

    我刚刚学习如何编写编译器 所以如果我有任何错误的说法 请纠正我 当人们可以简单地使用正则表达式时 为什么还要在代码中实现 DFA goto 语句 表驱动实现 据我了解 词法分析器接收一串字符并生成一个标记列表 这些标记在语言的语法定义中是终
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 特殊名称属性还允许哪些其他巧妙的技巧?

    研究中一个问题 https stackoverflow com questions 13259162 vb net power operator overloading from c sharp关于实现 Visual Basic Power
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚

随机推荐

  • @Request Mapping 中的生产和消费是什么

    我的项目中有以下代码行 RequestMapping value UrlHandler GET AUTHENTICATION produces application json consumes application json metho
  • 如何从不同列条件下的 PySpark 数据帧中提取数组元素?

    我有以下内容PySpark 输入数据框 index valuelist 1 0 10 20 30 2 0 11 21 31 0 0 14 12 15 Where 索引 双精度型 值列表 类型Vector it s 非数组 从上面的输入数据框
  • 程序加载期间添加的菜单项的 Vcl 样式问题

    我有一个 Delphi 10 4 2 程序 32 位 其中在程序加载期间添加菜单项 Application OnActivate 事件 编码为仅运行一次 如果没有 vcl 样式 新项目将正确显示 但是当应用样式时 例如屏幕截图中非常漂亮的
  • 受约束的成员函数和显式模板实例化

    G 和 Clang 一致认为以下代码片段不是有效的 C template
  • 通过观察ViewModel在RecyclerView中搜索PagedList的LiveData

    使用 android Paging 库 可以很容易地从数据库中分块加载数据 并且 ViewModel 提供自动 UI 更新和数据保存 所有这些框架模块帮助我们在 Android 平台上创建一个出色的应用程序 典型的 Android 应用程序
  • php.ini 中的浮点数范围-0 是浮点数吗?

    当我转换字符串时 0 在 float 中 它返回 float 类型 0 example x 0 y float x 结果 gt 浮动 0 why 0是浮点数吗 IEEE 754 标准是几乎所有计算机语言实现浮点数的标准 它具有 0 and
  • Django管理命令中的动态一行输出

    我有一个 Django 管理命令 它执行大量处理 因此我让它以百分比形式输出进度 我想使用答案中描述的技术here https stackoverflow com questions 5290994 python remove and re
  • MariaDB 10 CentOS 7 移动数据目录的问题

    CentOS 7 和 MariaDB 10 的全新 最小 安装 我有一个额外安装的镜像卷 我想将其用于数据目录 当 my cnf mysqld 被注释掉时 启动顺序正常并正常完成 我已经复制了数据 sudo cp R p var lib m
  • Flutter Firestore 查询中可以使用通配符吗?

    我的目标是从路径 chat chattype room roomID message 流式传输数据库中的所有消息 在该路径中我需要查询文档中包含包含 user1 的字符串的所有消息 而无需查询明确指定房间 ID 似乎无法让它与通配符一起工作
  • 访问数据库的用户列表

    我有一个 MySQL 数据库 由我的一群队友访问 有没有命令可以获取当前正在访问或已经访问并注销的用户的日志信息 从 mysql 工具运行以下命令来查看所有当前正在运行的进程 包括睡眠连接 SHOW PROCESSLIST 或者 您可以查询
  • 使用 JComboBox Java Swing 选择颜色

    我有一个 JComboBox 我想让用户在其中选择颜色 JComboBox 仅显示颜色 没有任何文本 我已经想出了这个解决方案 请告诉我这是否好或应该避免以及为什么 我对 Swing 和 Java 总体来说是新手 所以请耐心等待 publi
  • .gitattributes 中的“* text=auto eol=lf”和“* text eol=lf”有什么区别?

    这与这个问题非常相似 gitattributes 中的 text auto 和 text eol lf 有什么区别 https stackoverflow com questions 46590142 what is the differr
  • 合并(使用挤压)来自另一个分支的所有更改作为单个提交

    在 Git 中 有没有一种方法可以将一个分支的所有更改合并到另一个分支 但同时压缩为单个提交 我经常在单独的分支中开发新功能 并定期提交 推送 主要用于备份或将我正在开发的内容转移到另一台机器上 大多数这些提交都会说 Feature xxx
  • 如何更改datagridview中的行颜色

    我想更改 datagridview 中特定行的颜色 当列单元格 7 的值小于列单元格 10 的值时 该行应更改为红色 关于如何实现此目的有什么建议吗 您需要循环遍历 datagridview 中的行 然后比较每行上第 7 列和第 10 列的
  • Angular2 可观察定时器条件

    我有一个计时器 initiateTimer if this timerSub this destroyTimer let timer TimerObservable create 0 1000 this timerSub timer sub
  • 如何解决 WPF 中的“绑定表达式路径错误”?

    我将模型对象的可观察集合绑定到数据网格 但是当我将绑定设置到集合时 我收到了指向人员的路径错误 在调试此问题时 我检查了 CustomerModel 中的公共属性在 DataGrid 绑定中是否正确命名 而且返回到模型的集合不为空 我还检查
  • 为什么使用window.onload

    我尝试自己找到这个问题的答案 但只找到了有关如何使用 onload 事件的说明 我似乎没有抓住要点 我被告知 如果我希望在页面加载时发生某些事情 我应该像这样使用 window onload 但现在我自己思考 我想知道这样做的意义是什么 因
  • 将 forMine 设置为 false 进行搜索时,youtube v3 api 错误

    我正在编写一些函数Youtube API version 3 我在用python但在谷歌提供的测试控制台中确认了我的错误 我正在提出所有授权请求 只是没有在下面粘贴我的密钥 Python 客户端库自动添加forMine参数给我的Search
  • 如何在不暂存的情况下 git 添加新文件?

    为了有效地 并按预期 使用 git 我进行了小的原子提交 而我确实有更长的会话 我所做的不仅仅是一件事 因此 我大量使用git add p 不过 这不适用于全新的文件 因为我以后往往会忘记它们 我想做的是告诉git那里is一个新文件 我希望
  • 我在哪里可以学习编写词法分析器的基础知识?

    我想学习如何编写词法分析器 我的大学课程有一项作业 我们必须编写一个解析器 以及与之配套的词法分析器 但这是给我们的 没有任何指导或反馈 超出了标准 所以我并没有真正从中学到很多东西 搜索这个主题后 我只能找到相当高级的文章 这些文章重点关