Frama-c 无法解析涉及模式匹配构造的 ACSL 手册示例 list_length
Frama-c fails to parse an ACSL manual example list_length involving a pattern matching construct
关于以下函数定义(list.c):
//@ type list<A> = Nil | Cons(A,list<A>);
/*@ logic integer list_length<A>(list<A> l) =
@ \match l {
@ case Nil : 0
@ case Cons(h,t) : 1 + list_length(tail)
@ };
*/
frama-c 失败并显示消息:
$ frama-c -wp -wp-rte list.c
[jessie3] Loading Why3 configuration...
[jessie3] Why3 environment loaded.
[jessie3] Loading Why3 theories...
[jessie3] Loading Why3 modules...
[kernel] Parsing FRAMAC_SHARE/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing list.c (with preprocessing)
list.c:4:[kernel] user error: unexpected token 'l'
[kernel] user error: stopping on file "list.c" that has errors. Add '-kernel-msg-key pp'
for preprocessing command.
[kernel] Frama-C aborted: invalid user input.
示例直接取自ACSL manual。
为什么将 l
与函数的唯一参数相关联时会出现问题?
P.S。我用的frama-c版本:Sodium-20150201
当前的 Frama-C 实现不支持模式匹配。为了检查内核是否支持特定的 ACSL 功能(这并不总是意味着您喜欢的插件会处理它),请参阅 ACSL implementation manual。如手册介绍中所述,当前版本的 Frama-C 不支持以红色显示的每个条目。
关于以下函数定义(list.c):
//@ type list<A> = Nil | Cons(A,list<A>);
/*@ logic integer list_length<A>(list<A> l) =
@ \match l {
@ case Nil : 0
@ case Cons(h,t) : 1 + list_length(tail)
@ };
*/
frama-c 失败并显示消息:
$ frama-c -wp -wp-rte list.c
[jessie3] Loading Why3 configuration...
[jessie3] Why3 environment loaded.
[jessie3] Loading Why3 theories...
[jessie3] Loading Why3 modules...
[kernel] Parsing FRAMAC_SHARE/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing list.c (with preprocessing)
list.c:4:[kernel] user error: unexpected token 'l'
[kernel] user error: stopping on file "list.c" that has errors. Add '-kernel-msg-key pp'
for preprocessing command.
[kernel] Frama-C aborted: invalid user input.
示例直接取自ACSL manual。
为什么将 l
与函数的唯一参数相关联时会出现问题?
P.S。我用的frama-c版本:Sodium-20150201
当前的 Frama-C 实现不支持模式匹配。为了检查内核是否支持特定的 ACSL 功能(这并不总是意味着您喜欢的插件会处理它),请参阅 ACSL implementation manual。如手册介绍中所述,当前版本的 Frama-C 不支持以红色显示的每个条目。