gpt4 book ai didi

abstract-syntax-tree - 使用 ASIS(Ada Semantics 接口(interface)规范)修改 Ada 源代码

转载 作者:行者123 更新时间:2023-12-02 09:12:02 25 4
gpt4 key购买 nike

我正在开发一个工具,用于查找 Ada 源代码中的子类型范围溢出问题。为此,我使用 ASIS 来查找 Ada 源代码中的赋值语句,并查找赋值右侧的变量类型现在我想将赋值表达式的变量(不是记录类型)替换为赋值语句中变量类型的“第一个,”最后一个值,这样如果发生任何范围溢出,我将收到编译错误。下面是例如我想传达的内容。

procedure Example is
subtype A_Type is integer 1 .. 10;
subtype B_Type is integer -5 .. 5;
subtype C_Type is integer 1 .. 12;

A : A_Type;
B : B_Type;
C : C_Type;
begin
C := A + B;
end Example;

我想在源代码中修改 C := A + B;C := A_Type'Last + B_Type'LastC := A_Type'Last + B_Type'Last 赋值语句将在编译时收到警告或在运行时收到约束错误。

是否可以使用 ASIS 进行上述修改?

最佳答案

为了您的目的,您不应该重写您正在处理的源文本。您应该编写一个新程序,其中仅包含所需的声明和赋值。

所以输出应该是这样的:

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;

关于abstract-syntax-tree - 使用 ASIS(Ada Semantics 接口(interface)规范)修改 Ada 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com