- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一种方法来描述包含抽象列表的逻辑/规范级结构。 ACSL Reference Manual 的第 27 页上的示例 2.2.7表明有一个 方法如下:
//@ type point = struct { real x; real y; };
//@ type triangle = point[3];
//@ logic point origin = { .x = 0.0 , .y = 0.0 };
/*@ logic triangle t_iso = { [0] = origin,
@ [1] = { .y = 2.0 , .x = 0.0 }
@ [2] = { .x = 2.0 , .y = 0.0 }};
@*/
/*@ logic point centroid(triangle t) = {
@ .x = mean3(t[0].x,t[1].x,t[2].x);
@ .y = mean3(t[0].y,t[1].y,t[2].y);
@ };
@*/
//@ type polygon = point[];
/*@ logic perimeter(polygon p) =
@ \sum(0,\length(p)-1,\lambda integer i;d(p[i],p[(i+1) % \length(p)])) ;
@*/
如果我将这段确切的代码复制/粘贴到文本编辑器中,并尝试使用 wp 插件运行这段代码:
frama-c -wp -wp-rte -wp-prover alt-ergo shapes.c
我得到一个错误:
[kernel:annot-error] shapes.c:1: 警告:意外的标记 '{'
如果我放弃尝试编写结构类型的逻辑/规范级声明,但仍想编写实例化 C 中定义的结构的逻辑/规范级表达式,如下所示:
struct somestruct {
int x;
int y;
};
/*@
logic struct somestruct foo = { .x = 3, .y = 4 };
*/
我仍然遇到错误:
[kernel:annot-error] aggregate_err.c:7: Warning:
unsupported aggregated field construct. Ignoring global annotation
并且没有办法将结构的特定值编写为规范中的表达式会导致一些相当丑陋的规范,所以我希望我做错了什么。
如果我深入研究 frama-C 20.0 的源代码以尝试找到 /*@type
声明的解析器生成器代码部分,它看起来像 Ex 2.2.7 中的语法并没有真正实现。看起来类型级别声明的语法是第 799 行frama-c-20.0-Calcium/src/kernel_internals/parsing/logic_parser.mly(称为 type_spec)结构类型级别声明的解析规则是:
| STRUCT exit_rt_type identifier_or_typename { LTstruct $3 }
看起来会支持
//@type foo = struct c_struct;
但不像 Ex 2.2.7 中的那样:
//@type point = struct { real x;真实的你; };
为了更好地支持 ACSL/Frama-C 中的结构,我还应该做些什么吗?谢谢!
最佳答案
当前的 Frama-C 实现不支持所有 ACSL 结构。每个 Frama-C 版本都附带一个 ACSL 实现手册,其中描述了尚未实现的结构。对于 Frama-C 20.0 钙,可以找到 here .在本文档中,相关 BNF 规则中未支持的结构显示为红色。但是请注意,手册的其他部分保持不变。值得注意的是,实现手册中包含示例的事实并不意味着它有望被当前的 Frama-C 版本成功解析。在您的情况下,这些是第 57 页上图 2.17 的规则,这表明确实没有实现记录。
正如您自己已经发现的那样,确实可以定义一个 C struct
(可能是 ghost
)和一个 ACSL 类型。当然,由于 struct
存在于 C 世界中,它的字段必须具有 C 类型(也不支持 ghost 声明中的 ACSL 类型)。
类似地,您可以通过对任意记录的所有字段进行更新(\with
构造)来模拟不存在直接记录定义,如下例所示:
//@ ghost struct c_s { float x; float y; };
//@ type point = struct c_s;
//@ axiomatic Arbitrary_point { logic point empty; }
//@ logic point my_point = {{ empty \with .x = (float)1. } \with .y = (float)2.};
关于frama-c - ACSL 逻辑结构声明不像引用手册中那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456820/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我可以从哪里下载 cakephp 1.3 的手册.......? 最佳答案 强烈建议不要下载手册,因为它与开发的方式相同,并且可以改进和更改。但是,我承认需要离线副本,您可以在此处找到有关在哪里查看以
我想使用 GKSession 连接两台设备,其中一台作为服务器,另一台作为客户端。使用此配置我无法使用 GKPeerPickerController。 我在连接两个设备时遇到问题: 仅使用蓝牙:不可能
我花了相当多的时间寻找教程并在 Web 服务目录上实现签名和加密。现在我需要扩展该功能以允许每个用户拥有自己的签名和加密 key 。 出于这个原因,我开始四处寻找一些关于如何使用 WSS4J 拦截器的
使用ggplot2我通常使用geom_text和position=jitter之类的东西来注释我的图。 但是 - 对于一个漂亮的情节,我经常发现手动注释是值得的。如下所示: data2 <- stru
谁能推荐一本好的 ANSI SQL 引用手册吗? 我不一定是指教程,而是当您需要基本或更深入的解释或示例时可以查找的适当引用文档。 目前我正在使用W3Schools SQL Tutorial和 SQL
我正在尝试为我的 CS 1 类(class)编写代码。 代码的要点是编写一个代码,您可以在其中从一百美元的钞票中进行任何金额的找零,我需要归还适当的钞票和硬币。 我必须手动编写 JFrame 如果有人
我正在阅读 shellcoder 的手册。我正在跟踪,但由于某种原因无法让我的 shellcode 运行。我已经编译了该程序 gcc -mpreferred-stack-boundary=2 -m32
我的作业(不是家庭作业,只是“如果你能做到就试试”的事情)是使用位操作来加密和解密 .txt 文件。 这是程序。它成功打开文件进行读/写,但将所有 0 和空格放入 output.txt 文件而不是预期
我在谷歌上搜索了很多关于 C 的不必要结果。我希望能在本地获得最好的 C 手册。我发现引用资料很有用 here.我想自己做笔记并删除手册。 Can I manage it somehow like a
我在这个例子中 w.r.t. shellcoder's handbook(second edition),还有一些关于栈的问题 root@bt:~/pentest# gdb -q sc Readin
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
所以我有一份 PDF 手册,我们正在尝试为其创建可打印的 HTML 版本。我遇到了一些障碍,包括: 100% 缩放与缩小以适合(FF/IE 中的默认设置似乎不同) 只打印一页,后面没有空格页脚(或者甚
当我开始使用 PHP(大约 10 年前)时,最吸引我的是 .chm 格式的手册。我过去常常让“索引”选项卡保持打开状态,然后在其中输入我需要的任何内容,它会引导我进入一个漂亮、简洁但详尽的引用页面。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想更好地了解如何使用 LLDB 调试我的 iOS 代码。我经常看到我的同事使用提示进行调试,例如查看变量的值等等。我在哪里可以找到一些关于如何在命令行上使用 LLDB 调试器的文档? 提前致谢。 最
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
Springer 的 Consolidated Ada Reference Manual 2005 Edition (ISO/IEC 8652:2007(E), Ed. 3) 和 Annotated
我遇到过几个关于使用 mysql 连接器/C++ 的文档,其中所有文档都使用不同的函数来完成相同的事情。例如 `sql::mysql::MySQL_Driver *driver; sql::Conne
我是一名优秀的程序员,十分优秀!