第二部分

初始后端实现

框架后端支持编译器和解释器。现在框架抽象类Backend有两个极简版实现,一个为编译器另一个为解释器。图2-7 展示了它们的UML类图。

图2-7 子类CodeGenerator和Executor分别是后端的编译器和解析器实现。

(基于Java)编写编译器和解释器-第2章:框架I:编译器和解释器-第三部分(连载)

编译器

编译器后端做代码生成。backend.compiler包中的类CodeGenerator实现框架抽象类Backend。现在它被最大简化了。清单2-20 展示了它的父类方法process的实现。方法参数引用自中间码和符号表,它产生一条消息指出生成器生成了多少条机器语言指令(目前0条,因为没有实际生成过程)以及代码生成耗用时间。它调用sendMessage()方法发送编译摘要消息。

编译器约定摘要格式为:

  • instructionCount:指令生成条数。
  • elapsedTime:代码生成耗用时间。

所有COMILER_SUMMARY消息必须遵循这种约定。

清单2-20:类CodeGenerator的初级版实现

/**
 * <p>编译器的后端代码生成器</p>
 */
extends Backend
   5: {
void process(ICode iCode, SymTab symTab)
throws Exception
   8:     {
long startTime = System.currentTimeMillis();
float elapsedTime = (System.currentTimeMillis() - startTime)/1000f;
int instructionCount = 0;
  12:  
// 发送编译摘要消息
new Message(COMPILER_SUMMARY,
new Number[] {instructionCount,
  16:                                               elapsedTime}));
  17:     }
  18: }

相关文章:

  • 2021-12-07
  • 2021-07-28
  • 2021-08-05
  • 2021-11-20
  • 2021-09-08
  • 2022-01-13
  • 2021-11-20
  • 2021-07-05
猜你喜欢
  • 2022-01-30
  • 2021-07-25
  • 2022-01-14
  • 2021-12-31
  • 2022-02-21
  • 2021-12-10
  • 2021-11-27
相关资源
相似解决方案