尝试使用归纳谓词时出现语法错误
Syntax error when trying to use inductive predicate
我正在尝试使用摘自网页 https://frama-c.com/acsl_tutorial_index.html:
的归纳谓词示例
#include <stddef.h>
#include <stdlib.h>
typedef struct _list { int element; struct _list* next; } list;
/*@ inductive reachable{L} (list* root, list* node) {
case root_reachable{L}:
\forall list* root; reachable(root,root);
case next_reachable{L}:
\forall list* root, *node;
\valid(root) ==>
reachable(root−>next, node) ==>
reachable(root,node);
}
*/
但是,我得到一个编译错误:
$ frama-c -wp -wp-rte -wp-split list.c
[kernel] Parsing list.c (with preprocessing)
[kernel:annot-error] list.c:12: Warning: unexpected token '>'
[kernel] User Error: warning annot-error treated as fatal error.
[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.
我得到的错误似乎是 root->next
。
如果我尝试以下操作,它会起作用:
/*@ inductive reachable{L} (list* root, list* node) {
case empty{L}: \forall struct List* l; reachable(l, l);
case non_empty{L}: \forall list *l1,*l2;
\valid(l1) && reachable(l1->next, l2) ==> reachable(l1, l2);
}
*/
也许我做错了什么?尽管我尝试做的只是复制和粘贴教程代码。任何帮助表示赞赏。
确实很难发现,但是 >
之前的 −
不是标准的 ASCII 破折号 -
而是它无数的 unicode 变体之一。这就是让 Frama-C 感到困惑的原因。当然,这不会发生在您有正常 -
.
的手写代码中
我正在尝试使用摘自网页 https://frama-c.com/acsl_tutorial_index.html:
的归纳谓词示例#include <stddef.h>
#include <stdlib.h>
typedef struct _list { int element; struct _list* next; } list;
/*@ inductive reachable{L} (list* root, list* node) {
case root_reachable{L}:
\forall list* root; reachable(root,root);
case next_reachable{L}:
\forall list* root, *node;
\valid(root) ==>
reachable(root−>next, node) ==>
reachable(root,node);
}
*/
但是,我得到一个编译错误:
$ frama-c -wp -wp-rte -wp-split list.c
[kernel] Parsing list.c (with preprocessing)
[kernel:annot-error] list.c:12: Warning: unexpected token '>'
[kernel] User Error: warning annot-error treated as fatal error.
[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.
我得到的错误似乎是 root->next
。
如果我尝试以下操作,它会起作用:
/*@ inductive reachable{L} (list* root, list* node) {
case empty{L}: \forall struct List* l; reachable(l, l);
case non_empty{L}: \forall list *l1,*l2;
\valid(l1) && reachable(l1->next, l2) ==> reachable(l1, l2);
}
*/
也许我做错了什么?尽管我尝试做的只是复制和粘贴教程代码。任何帮助表示赞赏。
确实很难发现,但是 >
之前的 −
不是标准的 ASCII 破折号 -
而是它无数的 unicode 变体之一。这就是让 Frama-C 感到困惑的原因。当然,这不会发生在您有正常 -
.