Parsing 扫描、解析和编译ABAP源代码的过程?

Parsing 扫描、解析和编译ABAP源代码的过程?,parsing,compilation,abap,abstract-syntax-tree,Parsing,Compilation,Abap,Abstract Syntax Tree,这是一个关于汇编过程的相当技术性的问题 ABAP代码 我知道有ABAP解析器和扫描程序类实际上 调用C内核函数来完成真正的工作。然后是代码完成 具有事务的功能,该事务将程序的AST(抽象源代码树)返回并打印为ABAP列表或XML 现在我的问题是:是否可以“跳过”ABAP源代码 编码并直接生成这样的AST,而不是通过编写然后执行 ABAP程序在SE80左右,并把它交给一些函数进行编译 执行它,就好像它是用ABAP代码编写和解析的一样 也就是说,我可以跳过源代码的扫描和解析,直接给出 编译程序的AS

这是一个关于汇编过程的相当技术性的问题 ABAP代码

我知道有ABAP解析器和扫描程序类实际上 调用C内核函数来完成真正的工作。然后是代码完成 具有事务的功能,该事务将程序的AST(抽象源代码树)返回并打印为ABAP列表或XML

现在我的问题是:是否可以“跳过”ABAP源代码 编码并直接生成这样的AST,而不是通过编写然后执行 ABAP程序在SE80左右,并把它交给一些函数进行编译 执行它,就好像它是用ABAP代码编写和解析的一样

也就是说,我可以跳过源代码的扫描和解析,直接给出 编译程序的AST?如果是,以什么形式?ABAP列表看起来更简单
一种打印格式,不像用括号括起来的Lisp列表。

不幸的是,ABAP编译器不使用AST生成VM代码。 ABAP编译器按顺序工作,并将每个语句(即介于两个“.”之间的所有语句)转换为一个或多个虚拟机操作码

如果您感到好奇,可以查看显示编译器输出的事务SYNT。您还可以查看报告RSLOAD00,其中显示了为程序生成的ABAP VM代码

AST只在顶部构建,以允许代码完成或高级分析


如果要调用ABAP编译器,则需要生成文本ABAP源代码。

为什么要这样做?这听起来不必要的复杂,除了不受支持之外,这一直是任务关键型系统的一个问题……我测试的一些ABAP程序的AST看起来非常简单(特别是在ABAP列表形式中),手动创建它们应该不会太难。为什么?真的不确定,但我觉得这是个有趣的主意。这是我感兴趣的方式。哪个ABAP(内核)程序与此AST一起提供用于编译?这个AST是什么样的数据类型,如何创建一个呢?因为编译器是在源文本上工作的,所以您可以做的是预打印AST以生成源文本。请参阅我关于如何构建预打印程序的SO回答:@Ira谢谢,当您关注链接时,将发现一篇很棒的帖子!好啊谢谢,实际上太糟糕了——生成AST比生成文本ABAP源代码要容易得多。根据我的经验,生成代表自身的程序代码总是带有调试和编辑生成代码而不是生成器代码的诱惑。