File: tiny.grm

package info (click to toggle)
hol88 2.02.19940316dfsg-5
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 65,816 kB
  • sloc: ml: 199,939; ansic: 9,666; sh: 6,913; makefile: 6,032; lisp: 2,747; yacc: 894; sed: 201; cpp: 87; awk: 5
file content (117 lines) | stat: -rw-r--r-- 3,498 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
%
Tokens
%

FIRST_CHARS `a b c d e f g h i j k l m n o p q r s t u v w x y z 
             A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
             1 2 3 4 5 6 7 8 9 0`.

CHARS `a b c d e f g h i j k l m n o p q r s t u v w x y z 
       A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
       1 2 3 4 5 6 7 8 9 0 _`.

% Logical expressions (for use with assert and invariant) %

logical_1 --> [/\\] {mk_conj(POP,logical_expr)}
            | [\\/] {mk_disj(POP,logical_expr)}
            | [==>] {mk_imp(POP,logical_expr)}
            | [].

logical_expr --> [(] logical_expr [)] logical_1
               | bool_expr logical_1.
%
Expressions:
%

possible_paren --> [(] expression [)]
                 | {mk_variable(TOKEN)}.

rest_of_expression --> [+] {mk_plus(POP,possible_paren)} 
                           rest_of_expression
                     | [-] {mk_minus(POP,possible_paren)} 
                           rest_of_expression
                     | [*] {mk_mult(POP,possible_paren)} 
                           rest_of_expression
                     | [].

expression --> [(] expression [)] rest_of_expression
             | {mk_variable(TOKEN)} rest_of_expression.

rest_of_bool --> [=] {mk_eq(POP,bool_1)}
               | [>] {mk_gt(POP,bool_1)}
               | [<] {mk_lt(POP,bool_1)}
               | [<=] {mk_lte(POP,bool_1)}
               | [>=] {mk_gte(POP,bool_1)}
               | [<>] {mk_neq(POP,bool_1)}.

bool_1 --> [~] {mk_neg(bool_1)}
         | [(] bool_1 [)] poss_rest_of_bool
         | [T] {mk_const(`T`,":bool")}
         | [F] {mk_const(`F`,":bool")}
         | expression poss_rest_of_bool.


poss_rest_of_bool --> rest_of_bool | [].

bool_expr --> [~] {mk_neg(bool_expr)}
            | [(] bool_expr [)] poss_rest_of_bool
            | [T] {mk_const(`T`,":bool")}
            | [F] {mk_const(`F`,":bool")}
            | expression rest_of_bool.
%
Assignment Statement:
%

assignment_stmnt --> [:=] {mk_semantic(expression)} {mk_assign(POP,POP)}.

%
If Statement:
%

more_if_stmnts --> [else] a_stmnt more_stmnts {mk_if2(POP,POP,POP)}
                 | {mk_if1(POP,POP)}.

rest_of_if --> [then] many_stmnts more_if_stmnts.

%
While Statement:
%

rest_of_while --> [do] {mk_while(POP,many_stmnts)}.

%
General Statements:
%

MAIN_LOOP --> [\{] {mk_semantic(logical_expr)} [\}] is_spec
            | [\[] {mk_semantic(logical_expr)} [\]]
              many_stmnts
              [\[] {mk_semantic(logical_expr)} [\]]
              {mk_t_spec(POP,POP,POP)} [EOF]
            | [(] many_expr_logical [)][EOF]
            | many_expr_logical.

is_spec --> [EOF]
          | many_stmnts
            [\{] {mk_semantic(logical_expr)} [\}]
            {mk_spec(POP,POP,POP)} [EOF].

many_expr_logical --> many_stmnts | expression | bool_expr | logical_expr.

more_stmnts --> [;] a_stmnt more_stmnts {mk_seq(POP,POP)}
              | [].

many_stmnts --> a_stmnt more_stmnts.

meta_logical_stmnt --> [assert][\{] {mk_semantic(logical_expr)} [\}]
                       {mk_assert(POP)}
                     | [invariant] [\{] {mk_semantic(logical_expr)} [\}]
                       {mk_invariant(POP)}
                     | [variant] [\{] {mk_variable(TOKEN)} [\}]
                       {mk_semantic(POP)} {mk_variant(POP)}.

a_stmnt --> [(] many_stmnts [)]
          | [if] {mk_semantic(bool_expr)} rest_of_if 
          | [while] {mk_semantic(bool_expr)} rest_of_while
          | meta_logical_stmnt
          | {mk_variable_name(TOKEN)} assignment_stmnt.