首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ASIS(Ada语义接口规范)修改Ada源代码

使用ASIS(Ada语义接口规范)修改Ada源代码
EN

Stack Overflow用户
提问于 2018-06-20 10:53:07
回答 4查看 202关注 0票数 2

我正在开发一个工具,用于在Ada源code.for中查找子类型范围溢出问题。目的是使用ASIS在Ada源代码中查找赋值语句,并在赋值expression.now的右侧查找变量类型--我想将赋值表达式中的变量(而不是记录类型)替换为赋值语句中变量类型的最后一个值,以便如果任何范围溢出happens.below都是我要传达的示例,则将得到编译错误。

代码语言:javascript
运行
复制
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_Type'Last + B_Type'Last修改C := A_Type'Last + B_Type'LastC := A_Type'Last + B_Type'Last赋值语句将在编译时收到警告或在运行时得到约束错误。

是否有可能用ASIS进行上述修改?

EN

Stack Overflow用户

回答已采纳

发布于 2018-06-20 15:54:35

出于您的目的,您不应该重写您正在处理的源文本的。您应该编写一个新的程序,它只包含所需的声明和分配。

所以输出应该是这样的:

代码语言:javascript
运行
复制
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;
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50946512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档