Skip to content
Snippets Groups Projects
Commit bd92e903 authored by Patrick Baudin's avatar Patrick Baudin
Browse files

[ACSL] fixes bug with the precedence of \in (to be cont.)

parent c965f4e1
No related branches found
No related tags found
No related merge requests found
...@@ -282,8 +282,8 @@ ...@@ -282,8 +282,8 @@
%left PIPE %left PIPE
%left HAT %left HAT
%left STARHAT %left STARHAT
%nonassoc IN
%left AMP %left AMP
%nonassoc IN
%left LT %left LT
%left LTLT GTGT %left LTLT GTGT
%left PLUS MINUS %left PLUS MINUS
......
...@@ -162,8 +162,8 @@ module Precedence = struct ...@@ -162,8 +162,8 @@ module Precedence = struct
1 [%right prec_named] 1 [%right prec_named]
2 [%nonassoc TYPENAME] *) 2 [%nonassoc TYPENAME] *)
let questionLevel = 100 (* Pif, Aquestion: let questionLevel = 100 (* Pif, Aquestion:
4 [%right QUESTION prec_question] *) 4 [%right QUESTION prec_question] ??? *)
let binderLevel = 90 (* 3 [%nonassoc prec_forall prec_exists prec_lambda LET] *) let binderLevel = 90 (* 3 [%nonassoc prec_forall prec_exists prec_lambda LET] ??? *)
let iff_level = 89 (* 5 [%left IFF] *) let iff_level = 89 (* 5 [%left IFF] *)
let implies_level = 87 (* and +1 for positive side let implies_level = 87 (* and +1 for positive side
...@@ -174,34 +174,40 @@ module Precedence = struct ...@@ -174,34 +174,40 @@ module Precedence = struct
let xor_level = 84 (* 8 [%left HATHAT] *) let xor_level = 84 (* 8 [%left HATHAT] *)
let and_level = 83 (* 9 [%left AND] *) let and_level = 83 (* 9 [%left AND] *)
let and_or_level = 80 (* 7 [%left OR] let and_or_level = 80 (* 7 [%left OR]
9 [%left AND] *) 9 [%left AND] ??? *)
let assoc_connector_level x = let assoc_connector_level x =
and_level <= x && x <= or_level and_level <= x && x <= or_level
let logic_level = 77 (* Tif: 4 [%right QUESTION prec_question] *) let logic_level = 77 (* Tif: 4 [%right QUESTION prec_question] ??? *)
let bitwiseLevel = 75 (* 10 [%left BIFF] let bitwiseLevel = 75 (* 10 [%left BIFF]
11 [%right BIMPLIES] 11 [%right BIMPLIES]
12 [%left PIPE] 12 [%left PIPE]
13 [%left HAT] 13 [%left HAT]
14 [%left STARHAT] (releted to \repeat) 14 [%left STARHAT] (releted to \repeat)
15 [%nonassoc IN] ??? 15 [%left AMP] *)
16 [%left AMP] *)
let subtypeLevel = 75 (* 22 [%nonassoc LTCOLON COLONGT] *) let belongLevel = 72 (* 16 [%nonassoc IN] *)
let subtypeLevel = 75 (* 22 [%nonassoc LTCOLON COLONGT] ??? *)
let comparativeLevel = 70 (* 17 [%left LT] *) let comparativeLevel = 70 (* 17 [%left LT] *)
let additiveLevel = 60 (* 18 [%left LTLT GTGT] let additiveLevel = 60 (* 18 [%left LTLT GTGT]
19 [%left PLUS MINUS] *) 19 [%left PLUS MINUS] *)
let multiplicativeLevel = 40 (* 20 [%left STAR SLASH PERCENT] *) let multiplicativeLevel = 40 (* 20 [%left STAR SLASH PERCENT] *)
let belongLevel = 36 (* 15 [%nonassoc IN] ??? *)
let unaryLevel = 30 (* 21 [%right prec_cast TILDE NOT prec_unary_op] *) let unaryLevel = 30 (* 21 [%right prec_cast TILDE NOT prec_unary_op] *)
let addrOfLevel = 30 (* 21 [%right prec_cast TILDE NOT prec_unary_op] *) let addrOfLevel = 30 (* 21 [%right prec_cast TILDE NOT prec_unary_op] *)
let coerseLevel = 25 (* - [%token] *) let coerseLevel = 25 (* - [%token] *)
let memOffset_level = 20 (* 23 [%left DOT ARROW LSQUARE] *) let memOffset_level = 20 (* 23 [%left DOT ARROW LSQUARE] *)
let derefStarLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *) let derefStarLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *)
let indexLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *) let indexLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *)
let arrowLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *) let arrowLevel = 20 (* 23 [%left DOT ARROW LSQUARE] *)
let sizeOfLevel = 20 (* - [%token] *) let sizeOfLevel = 20 (* - [%token] *)
let alignOfLevel = 20 (* - [%token] *) let alignOfLevel = 20 (* - [%token] *)
let applicationLevel = 10 (* - [%token] *) let applicationLevel = 10 (* - [%token] *)
(* is this predicate the encoding of [\in]? If so, return its arguments. *) (* is this predicate the encoding of [\in]? If so, return its arguments. *)
......
...@@ -17,6 +17,12 @@ ...@@ -17,6 +17,12 @@
set of sets is not yet implemented. Ignoring global annotation set of sets is not yet implemented. Ignoring global annotation
[kernel:annot-error] tests/spec/tsets.c:57: Warning: [kernel:annot-error] tests/spec/tsets.c:57: Warning:
set of sets is not yet implemented. Ignoring global annotation set of sets is not yet implemented. Ignoring global annotation
[kernel:annot-error] tests/spec/tsets.c:71: Warning:
symbol \subset is a predicate, not a function. Ignoring global annotation
[kernel:annot-error] tests/spec/tsets.c:72: Warning:
symbol \subset is a predicate, not a function. Ignoring global annotation
[kernel:annot-error] tests/spec/tsets.c:73: Warning:
symbol \subset is a predicate, not a function. Ignoring global annotation
/* Generated by Frama-C */ /* Generated by Frama-C */
struct foo { struct foo {
char bar[4] ; char bar[4] ;
...@@ -103,6 +109,18 @@ int *AA(void); ...@@ -103,6 +109,18 @@ int *AA(void);
/*@ logic set<ℤ> Sadd_elem_1(set<ℤ> s, ℤ e) = \union(s, e); /*@ logic set<ℤ> Sadd_elem_1(set<ℤ> s, ℤ e) = \union(s, e);
*/ */
/*@ logic set<ℤ> Sadd_elem_2(set<ℤ> s, ℤ e) = \union(s, {e}); /*@ logic set<ℤ> Sadd_elem_2(set<ℤ> s, ℤ e) = \union(s, {e});
*/
/*@ predicate Smember_and(set<ℤ> s, ℤ v1, ℤ v2) = (v1 & v2) ∈ s;
*/
/*@ predicate Smember_or(set<ℤ> s, ℤ v1, ℤ v2) = (v1 | v2) ∈ s;
*/
/*@
predicate Smember_and_or(set<ℤ> s, ℤ v1, ℤ v2) =
(v1 & v2) ∈ s ∧ (v1 | v2) ∈ s;
*/
/*@
logic set<ℤ> Scomprehension(set<ℤ> s, ℤ mask) =
{ (k | 1) | int k; (k | mask) ∈ s};
*/ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment