如何解析代码以构建 Java 编译器?

2023-12-30

我需要写一个编译器。这是大学的家庭作业。老师告诉我们,我们可以使用任何我们想要的API来进行代码的解析,只要它是好的。这样我们就可以更加关注我们将生成的 JVM。

所以是的,我将用 Java 编写一个编译器来生成 Java。

你知道有什么好的API吗?我应该使用正则表达式吗?我通常手动编写自己的解析器,尽管在这种情况下不建议这样做。

任何帮助,将不胜感激。


正则表达式很适合在编译器中使用,但仅用于识别标记(即没有递归结构)。

编写编译器的经典方法是词法分析器为了识别令牌,语法分析器为了识别结构,语义分析器为了识别意义,中间代码生成器, an 优化器,最后一个目标代码生成器。如果使编译器更易于编写,则可以合并或完全跳过这些步骤中的任何一个。

已经开发了许多工具来帮助完成此过程。对于Java,你可以看看

  • ANTLR - http://www.antlr.org/ http://www.antlr.org/
  • 可可/R -http://ssw.jku.at/Coco/ http://ssw.jku.at/Coco/
  • JavaCC-https://javacc.dev.java.net/ https://javacc.dev.java.net/
  • 黑貂CC -http://sablecc.org/ http://sablecc.org/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解析代码以构建 Java 编译器? 的相关文章

随机推荐

  • 将枚举值添加到简单的组合框

    我有一个关于 C 和 WPF 的非常简单的问题要问 在我的这次尝试之后 我的问题将随之而来 private void Window Loaded object sender RoutedEventArgs e foreach var ite
  • gdb 上漂亮的打印 boost::unordered_map

    最近我开始在我的系统上使用优秀的 boost unordered map 但有一个缺点 我不知道如何检查其内容 在 gdb 上打印它会给我一个 table 和一个 buckets 但还没有找到这些项目在哪里 有人对此有任何线索吗 对于那些想
  • 将Java线程类放入一个单独的类中

    考虑以下 SWT 代码示例 http dev eclipse org viewcvs index cgi org eclipse swt snippets src org eclipse swt snippets Snippet151 ja
  • Microsoft SQL Server 分析服务 OLAP 多维数据集

    我试图找到一种工具来提高应用程序报告的性能 我听说了 OLAP Reporting Services 它被描述为完成这项工作的绝佳组合 无论如何 我没有找到使 OLAP 多维数据集保持最新的方法 因为原始数据库中的数据可能会更改 这是一个交
  • 为什么代码终止时出现“未找到解决方案”错误和“退出:收敛到局部不可行点。问题可能不可行”?

    我似乎不明白为什么IPOPT无法找到解决方案 最初 我认为这个问题完全不可行 但是当我减少总列数至以下任意号码161000 or 注释掉最后一个约束方程其中包含总列数 它解决并退出Optimal Solution Found and a f
  • Matplotlib:如何再次显示绘图?

    假设我做了一个情节Ipython Notebook 在几个单元格之后 我想再次渲染它 这样我就可以将它与其他图进行比较 我该怎么做 a 1 2 3 4 b 3 4 5 6 fig plt plot a b color black 这将显示情
  • Twig 迭代对象属性

    我在 Twig 文档中读到 可以通过以下方式迭代关联数组 for key value in array key value endfor 我想知道这对于 stdClass 类型的对象是否也可能 我希望 Twig 能够以属性名称作为键来迭代对
  • 我可以在 ASP.NET 中使用 X509Certificate2 而不使用证书存储吗?

    我正在尝试在 Rackspace 云中的 ASP NET Web 服务中使用 X509Certificate 我有一种感觉 存储在云节点上的证书可能会引起问题 我也有一个与此相关的问题 但我收到的问题是使用 iPhone Apple 推送通
  • Twitter Bootstrap 模态宽度问题

    我的应用程序具有许多模式 所有模式都有不同的宽度 我知道您可以通过执行以下操作来设置模态内联的宽度 宽度 400 像素 左边距 200px 这效果很好 但是如果你压缩窗口 它会将模态占到屏幕的 50 所以你看不到一半的模态渲染 在这些小分辨
  • 如何将一个数据框按行拆分成多个数据框然后导出到excel?右

    这是我正在使用的数据 Sales lt data frame State c New York New Jersey Texas New Mexico California Kansas Florida Alaska Montana Mai
  • 如何在 JFrame 中启动命令行 Java 代码?

    我有一个通过基本命令行界面执行的Java 程序 我想知道是否将其放入窗口 JFrame 中 是否可以 我能怎么做 谢谢 如果你想在 jFrame 中使用命令行 我认为这不是一个好主意 如果JFrame启动了 说明程序已经启动了 您必须使用命
  • 设置javascript对象多级属性的简单方法?

    我正在尝试创建一个像这样的javascript对象 var allUserExpiry allUserExpiry aData userId aData courseId aData uscId aData 但我收到了类似的错误allUse
  • 如何根据字段描述的对象类型根据 JSON 模式验证 JSON 对象?

    我有许多对象 消息 需要根据 JSON 模式 draft 04 进行验证 每个对象都保证有一个 type 字段 用于描述其类型 但每种类型都有一组完全不同的其他字段 因此每种类型的对象都需要一个唯一的模式 我看到了几种可能性 但没有一种特别
  • 使用 ASP.NET MVC 3 的 NHibernate 会话 + 事务

    我目前正在编写一个新应用程序 尽管公司标准是使用 NHibernate 因为这是所有项目的标准 但我正在使用 ASP NET MVC 3 因为它现在已经成熟 我已经在控制器中实现了我的事务 这应该是你应该这样做的方式 所以它在我的根控制器中
  • 如何在android中以编程方式将图像添加到图库或以编程方式刷新图库

    我正在将一些图像从服务器下载到 SD 卡的文件夹中 图像已成功存储到 SD 卡中 但问题是 同时图像没有显示在图库中 如果我重新启动设备 它将显示在图库中 如何以编程方式刷新图库 以便每当我从服务器获取图像时都可以同时看到图像 我明白了 下
  • MySQL 持久连接

    我有10个应用服务器和1个mysql数据库 我想为 mysql 做连接池 但简单地启用 mysql pconnect 是行不通的 因为它会导致某些服务器比其他服务器拥有更多的连接 这种情况的最佳解决方案是什么 为什么要使用持久连接 它们可能
  • 如何从 DTD 或 XSD 生成示例 XML 文档?

    我们正在开发一个涉及大量 XML 转换的应用程序 我们本身没有任何正确的输入测试数据 只有 DTD 或 XSD 文件 我们想从这些文件中生成我们的测试数据 有没有一种简单 免费的方法可以做到这一点 Edit 显然没有免费的工具可以做到这一点
  • imagecreatefrompng 错误

  • warning(junit.framework.TestSuite$1): 通过 Maven 执行 Android Test 时构造函数中出现异常

    我通过 Maven 设置了一个 Android 测试项目 并按照以下说明进行操作here http code google com p maven android plugin wiki AutomateAndroidTestProject
  • 如何解析代码以构建 Java 编译器?

    我需要写一个编译器 这是大学的家庭作业 老师告诉我们 我们可以使用任何我们想要的API来进行代码的解析 只要它是好的 这样我们就可以更加关注我们将生成的 JVM 所以是的 我将用 Java 编写一个编译器来生成 Java 你知道有什么好的A