关于 ABAP 这门编程语言的编译器和解释器

举报
汪子熙 发表于 2023/07/06 08:53:07 2023/07/06
【摘要】 大家都知道ABAP是第四代高级语言。但我们有多少人能确定ABAP 报表是如何执行的?它有编译器还是解释器,还是两者兼有?其实答案是:在某种程度上,它两者都有。详细说明一下:在ABAP程序执行之前,ABAP编译器必须将其翻译成一种中间语言。这种形式的程序,即以这种中间形式的程序被称为ABAP负载。然后ABAP虚拟机出现了。ABAP虚拟机是ABAP负载的解释器,也就是说,它可以执行ABAP负载。...

大家都知道ABAP是第四代高级语言。但我们有多少人能确定ABAP 报表是如何执行的?它有编译器还是解释器,还是两者兼有?

其实答案是:在某种程度上,它两者都有

详细说明一下:在ABAP程序执行之前,ABAP编译器必须将其翻译成一种中间语言。这种形式的程序,即以这种中间形式的程序被称为ABAP负载。然后ABAP虚拟机出现了。ABAP虚拟机是ABAP负载的解释器,也就是说,它可以执行ABAP负载。我们可以将整个场景与Java编译-解释过程相互关联。

在继续之前,我们需要了解什么是处理块。大家应该知道ABAP程序具有模块化结构。这些模块称为处理块。这只是重新组织技巧。

从逻辑上讲,如果我们看任何ABAP程序,它包含两部分:

  1. 第一部分包含全局声明。
  2. 第二部分包含处理块。

有几种类型的处理块,包括对话模块和子程序。更准确地说,有以下类型的处理块:

  1. 对话模块
  2. 事件块
  3. 子程序(子例程、功能模块和方法)。

对话模块是从屏幕流程逻辑中调用的。子程序是使用ABAP语句调用的,这些语句本身是其他处理块的一部分,而事件块是从ABAP程序外部调用的。

ABAP负载与ABAP程序的处理块一一对应,即对于ABAP程序中的每个处理块,在相应的ABAP负载中都有一个处理块。在执行任何处理块之前,首先要确定相应的ABAP程序是否已经编译过。如果已经编译过,则ABAP虚拟机可以立即开始执行处理块;否则,ABAP编译器必须先将ABAP程序翻译成ABAP负载,然后再执行它。

这是对ABAP程序编译过程的一个概述。

我已经在自己的公众号这篇文章详细介绍过ABAP负载的结构和编译过程:

顺便说一句,如果大家可以访问数据库,那么能够在D010S表中查看ABAP报告,而在D010L表中查看ABAP负载。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。