ASIS并非旨在进行类似的修改。但是你可以看看 libadalang 从AdaCore,它支持这个(并在部分源上工作,所以你不必预编译你的源)
为了你的目的,你不应该 的 改写 强> 您正在处理的源文本。您应该编写一个新程序,该程序仅包含所需的声明和赋值。
所以输出应该是这样的:
with Type_Declarations; procedure Test_Driver is begin declare C : Type_Declarations.C_Type; begin C := Type_Declarations."+" (Type_Declarations.A_Type'First, Type_Declarations.B_Type'First); C := Type_Declarations."+" (Type_Declarations.A_Type'First, Type_Declarations.B_Type'Last); C := Type_Declarations."+" (Type_Declarations.A_Type'Last, Type_Declarations.B_Type'First); C := Type_Declarations."+" (Type_Declarations.A_Type'Last, Type_Declarations.B_Type'Last); end; end Test_Driver;
如果您想要一个可以对Ada源代码进行修改的工具,您可能会对我们感兴趣 DMS软件再造工具包 凭借其Ada前端。
DMS将源代码解析为AST,并使用DMS的抽象语法树过程接口(直接在树节点进行黑客攻击)和/或使这些AST可用于修改 DMS的重写规则(源到源转换“,如果你看到的话 这个 替换它 那 “用[Ada]语言表面语法编写 ,直接操纵树木。完成更改后,DMS可以对源进行重新打印以重新生成有效的Ada源代码,甚至可以保留那些尚未修改的地方的注释和格式。
GNAT包括实用程序 gnat2xml 和 xml2gnat ; gnat2xml 根据ASIS生成源代码,并且 xml2gnat 将它转换回Ada。您可以修改第一个的XML输出并将其反馈给第二个。
gnat2xml
xml2gnat
不是我推荐这个; XML模式没有记录,并且很复杂。