falluto 0.0.1 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/cleantrace.rb +97 -0
- data/bin/falluto.rb +92 -2
- data/bin/ftnusmv.rb +96 -0
- data/bin/viewtrace.rb +162 -0
- data/lib/falluto/compiler.rb +410 -0
- data/lib/falluto/grammar/nodes.rb +141 -0
- data/lib/falluto/grammar/rules.treetop +478 -0
- data/lib/falluto/grammar/tokens.treetop +145 -0
- data/lib/falluto/grammar.rb +7 -0
- data/lib/falluto/nusmv/codegen.rb +39 -0
- data/lib/falluto/nusmv/fault.rb +87 -0
- data/lib/falluto/nusmv/module.rb +45 -0
- data/lib/falluto/nusmv/variable.rb +13 -0
- data/lib/falluto/nusmv.rb +4 -0
- data/lib/falluto/ruby_extensions/class.rb +10 -0
- data/lib/falluto/ruby_extensions/file.rb +5 -0
- data/lib/falluto/ruby_extensions/hash.rb +3 -0
- data/lib/falluto/ruby_extensions/string.rb +5 -0
- data/lib/falluto/ruby_extensions.rb +4 -0
- data/lib/falluto/symboltable.rb +34 -0
- data/lib/falluto/version.rb +10 -0
- data/spec/grammar/parser_spec.rb +121 -0
- data/spec/nusmv/fault_spec.rb +17 -0
- data/spec/nusmv/generator_spec.rb +42 -0
- data/spec/nusmv/module_spec.rb +12 -0
- data/spec/nusmv/variable_spec.rb +32 -0
- data/spec/spec_helper.rb +4 -0
- metadata +35 -14
- data/.document +0 -5
- data/.gitignore +0 -21
- data/Rakefile +0 -56
- data/VERSION +0 -1
- data/test/helper.rb +0 -10
- data/test/test_falluto.rb +0 -7
@@ -0,0 +1,478 @@
|
|
1
|
+
module Falluto
|
2
|
+
grammar Grammar
|
3
|
+
include Tokens
|
4
|
+
|
5
|
+
rule program
|
6
|
+
sp module_list eof
|
7
|
+
end
|
8
|
+
|
9
|
+
rule number
|
10
|
+
TOK_NUMBER
|
11
|
+
/ TOK_PLUS TOK_NUMBER
|
12
|
+
end
|
13
|
+
|
14
|
+
rule integer
|
15
|
+
TOK_NUMBER
|
16
|
+
/ TOK_PLUS TOK_NUMBER
|
17
|
+
/ TOK_MINUS TOK_NUMBER
|
18
|
+
end
|
19
|
+
|
20
|
+
rule number_word
|
21
|
+
TOK_NUMBER_WORD
|
22
|
+
end
|
23
|
+
|
24
|
+
rule subrange
|
25
|
+
integer TOK_TWODOTS integer
|
26
|
+
end
|
27
|
+
|
28
|
+
rule constant
|
29
|
+
TOK_FALSEEXP
|
30
|
+
/ TOK_TRUEEXP
|
31
|
+
/ number_word
|
32
|
+
/ number
|
33
|
+
end
|
34
|
+
|
35
|
+
rule primary_exp
|
36
|
+
constant primary_exp_tail
|
37
|
+
/ TOK_MINUS primary_exp primary_exp_tail
|
38
|
+
/ TOK_ATOM primary_exp_tail
|
39
|
+
/ TOK_SELF primary_exp_tail
|
40
|
+
/ TOK_LP basic_expr TOK_RP primary_exp_tail
|
41
|
+
/ TOK_NOT primary_exp primary_exp_tail
|
42
|
+
/ TOK_BOOL TOK_LP basic_expr TOK_RP primary_exp_tail
|
43
|
+
/ TOK_WORD1 TOK_LP basic_expr TOK_RP primary_exp_tail
|
44
|
+
/ TOK_NEXT TOK_LP basic_expr TOK_RP primary_exp_tail
|
45
|
+
/ TOK_CASE cases:(case_element_expr+) TOK_ESAC tail:primary_exp_tail <CaseNode>
|
46
|
+
end
|
47
|
+
|
48
|
+
rule primary_exp_tail
|
49
|
+
TOK_DOT TOK_ATOM primary_exp_tail
|
50
|
+
/ TOK_DOT TOK_NUMBER primary_exp_tail
|
51
|
+
/ TOK_LB simple_expression TOK_RB primary_exp_tail
|
52
|
+
/ TOK_LB simple_expression TOK_COLON simple_expression TOK_RB primary_exp_tail
|
53
|
+
/ EPSILON
|
54
|
+
end
|
55
|
+
|
56
|
+
rule case_element_expr
|
57
|
+
left:basic_expr TOK_COLON right:basic_expr disabled_by:(TOK_DISABLED_BY TOK_LCB list:fault_list TOK_RCB)? TOK_SEMI <CaseElementNode>
|
58
|
+
end
|
59
|
+
|
60
|
+
rule concatenation_expr
|
61
|
+
primary_exp (TOK_CONCATENATION primary_exp)*
|
62
|
+
end
|
63
|
+
|
64
|
+
rule multiplicative_expr
|
65
|
+
concatenation_expr multiplicative_expr_tail
|
66
|
+
end
|
67
|
+
|
68
|
+
rule multiplicative_expr_tail
|
69
|
+
TOK_TIMES concatenation_expr multiplicative_expr_tail
|
70
|
+
/ TOK_DIVIDE concatenation_expr multiplicative_expr_tail
|
71
|
+
/ EPSILON
|
72
|
+
end
|
73
|
+
|
74
|
+
rule additive_expr
|
75
|
+
multiplicative_expr additive_expr_tail
|
76
|
+
end
|
77
|
+
|
78
|
+
rule additive_expr_tail
|
79
|
+
TOK_PLUS multiplicative_expr additive_expr_tail
|
80
|
+
/ TOK_MINUS multiplicative_expr additive_expr_tail
|
81
|
+
/ EPSILON
|
82
|
+
end
|
83
|
+
|
84
|
+
rule remainder_expr
|
85
|
+
additive_expr (TOK_MOD additive_expr)*
|
86
|
+
end
|
87
|
+
|
88
|
+
rule shift_expr
|
89
|
+
remainder_expr shift_expr_tail
|
90
|
+
end
|
91
|
+
|
92
|
+
rule shift_expr_tail
|
93
|
+
TOK_LSHIFT remainder_expr shift_expr_tail
|
94
|
+
/ TOK_RSHIFT remainder_expr shift_expr_tail
|
95
|
+
/ EPSILON
|
96
|
+
end
|
97
|
+
|
98
|
+
rule set_expr
|
99
|
+
subrange
|
100
|
+
/ shift_expr
|
101
|
+
/ TOK_LCB set_list_expr TOK_RCB
|
102
|
+
end
|
103
|
+
|
104
|
+
rule set_list_expr
|
105
|
+
basic_expr (TOK_COMMA basic_expr)*
|
106
|
+
end
|
107
|
+
|
108
|
+
rule union_expr
|
109
|
+
set_expr (TOK_UNION set_expr)*
|
110
|
+
end
|
111
|
+
|
112
|
+
rule in_expr
|
113
|
+
union_expr (TOK_SETIN union_expr)*
|
114
|
+
end
|
115
|
+
|
116
|
+
rule relational_expr
|
117
|
+
in_expr relational_expr_tail
|
118
|
+
end
|
119
|
+
|
120
|
+
rule relational_expr_tail
|
121
|
+
TOK_EQUAL in_expr relational_expr_tail
|
122
|
+
/ TOK_NOTEQUAL in_expr relational_expr_tail
|
123
|
+
/ TOK_GT in_expr relational_expr_tail
|
124
|
+
/ TOK_GE in_expr relational_expr_tail
|
125
|
+
/ TOK_LT in_expr relational_expr_tail
|
126
|
+
/ TOK_LE in_expr relational_expr_tail
|
127
|
+
/ EPSILON
|
128
|
+
end
|
129
|
+
|
130
|
+
# CTL Specifications
|
131
|
+
rule ctl_expr
|
132
|
+
relational_expr / pure_ctl_expr
|
133
|
+
end
|
134
|
+
|
135
|
+
rule pure_ctl_expr
|
136
|
+
TOK_EX ctl_expr
|
137
|
+
/ TOK_AX ctl_expr
|
138
|
+
/ TOK_EF ctl_expr
|
139
|
+
/ TOK_AF ctl_expr
|
140
|
+
/ TOK_EG ctl_expr
|
141
|
+
/ TOK_AG ctl_expr
|
142
|
+
/ TOK_AA TOK_LB ctl_basic_expr TOK_UNTIL ctl_basic_expr TOK_RB
|
143
|
+
/ TOK_EE TOK_LB ctl_basic_expr TOK_UNTIL ctl_basic_expr TOK_RB
|
144
|
+
/ TOK_AA TOK_LB ctl_basic_expr TOK_BUNTIL ctl_basic_expr TOK_RB
|
145
|
+
/ TOK_EE TOK_LB ctl_basic_expr TOK_BUNTIL ctl_basic_expr TOK_RB
|
146
|
+
/ TOK_EBF subrange ctl_expr
|
147
|
+
/ TOK_ABF subrange ctl_expr
|
148
|
+
/ TOK_EBG subrange ctl_expr
|
149
|
+
/ TOK_ABG subrange ctl_expr
|
150
|
+
/ TOK_NOT pure_ctl_expr
|
151
|
+
end
|
152
|
+
|
153
|
+
rule ctl_and_expr
|
154
|
+
ctl_expr (TOK_AND ctl_expr)*
|
155
|
+
end
|
156
|
+
|
157
|
+
rule ctl_or_expr
|
158
|
+
ctl_and_expr ctl_or_expr_tail
|
159
|
+
end
|
160
|
+
|
161
|
+
rule ctl_or_expr_tail
|
162
|
+
TOK_OR ctl_and_expr ctl_or_expr_tail
|
163
|
+
/ TOK_XOR ctl_and_expr ctl_or_expr_tail
|
164
|
+
/ TOK_XNOR ctl_and_expr ctl_or_expr_tail
|
165
|
+
/ EPSILON
|
166
|
+
end
|
167
|
+
|
168
|
+
rule ctl_iff_expr
|
169
|
+
ctl_or_expr (TOK_IFF ctl_or_expr)*
|
170
|
+
end
|
171
|
+
|
172
|
+
rule ctl_implies_expr
|
173
|
+
ctl_iff_expr TOK_IMPLIES ctl_implies_expr
|
174
|
+
/ ctl_iff_expr
|
175
|
+
end
|
176
|
+
|
177
|
+
rule ctl_basic_expr
|
178
|
+
ctl_implies_expr
|
179
|
+
end
|
180
|
+
|
181
|
+
# LTL Specifications
|
182
|
+
rule ltl_unary_expr
|
183
|
+
ctl_expr
|
184
|
+
/ pure_ltl_unary_expr
|
185
|
+
end
|
186
|
+
|
187
|
+
rule pure_ltl_unary_expr
|
188
|
+
TOK_OP_NEXT ltl_unary_expr
|
189
|
+
/ TOK_OP_PREC ltl_unary_expr
|
190
|
+
/ TOK_OP_NOTPRECNOT ltl_unary_expr
|
191
|
+
/ TOK_OP_GLOBAL ltl_unary_expr
|
192
|
+
/ TOK_OP_HISTORICAL ltl_unary_expr
|
193
|
+
/ TOK_OP_FUTURE ltl_unary_expr
|
194
|
+
/ TOK_OP_ONCE ltl_unary_expr
|
195
|
+
/ TOK_NOT pure_ltl_unary_expr
|
196
|
+
end
|
197
|
+
|
198
|
+
rule ltl_binary_expr
|
199
|
+
ltl_unary_expr ltl_binary_expr_tail
|
200
|
+
end
|
201
|
+
|
202
|
+
rule ltl_binary_expr_tail
|
203
|
+
TOK_UNTIL ltl_unary_expr ltl_binary_expr_tail
|
204
|
+
/ TOK_SINCE ltl_unary_expr ltl_binary_expr_tail
|
205
|
+
/ TOK_RELEASES ltl_unary_expr ltl_binary_expr_tail
|
206
|
+
/ TOK_TRIGGERED ltl_unary_expr ltl_binary_expr_tail
|
207
|
+
/ EPSILON
|
208
|
+
end
|
209
|
+
|
210
|
+
rule and_expr
|
211
|
+
ltl_binary_expr (TOK_AND ltl_binary_expr)*
|
212
|
+
end
|
213
|
+
|
214
|
+
rule or_expr
|
215
|
+
and_expr or_expr_tail
|
216
|
+
end
|
217
|
+
|
218
|
+
rule or_expr_tail
|
219
|
+
TOK_OR and_expr or_expr_tail
|
220
|
+
/ TOK_XOR and_expr or_expr_tail
|
221
|
+
/ TOK_XNOR and_expr or_expr_tail
|
222
|
+
/ EPSILON
|
223
|
+
end
|
224
|
+
|
225
|
+
rule iff_expr
|
226
|
+
or_expr (TOK_IFF or_expr)*
|
227
|
+
end
|
228
|
+
|
229
|
+
rule implies_expr
|
230
|
+
iff_expr (TOK_IMPLIES iff_expr)*
|
231
|
+
end
|
232
|
+
|
233
|
+
rule basic_expr
|
234
|
+
implies_expr
|
235
|
+
end
|
236
|
+
|
237
|
+
rule simple_expression
|
238
|
+
basic_expr
|
239
|
+
end
|
240
|
+
|
241
|
+
rule next_expression
|
242
|
+
basic_expr
|
243
|
+
end
|
244
|
+
|
245
|
+
rule fault_list
|
246
|
+
first:TOK_ATOM rest:(TOK_COMMA fault:TOK_ATOM)*
|
247
|
+
end
|
248
|
+
|
249
|
+
rule ctl_expression
|
250
|
+
basic_expr
|
251
|
+
end
|
252
|
+
|
253
|
+
rule ltl_expression
|
254
|
+
basic_expr
|
255
|
+
end
|
256
|
+
|
257
|
+
rule itype
|
258
|
+
TOK_BOOLEAN
|
259
|
+
/ subrange
|
260
|
+
/ TOK_WORD TOK_LB simple_expression TOK_RB
|
261
|
+
/ TOK_INTEGER
|
262
|
+
/ TOK_LCB type_value_list TOK_RCB
|
263
|
+
/ TOK_ARRAY TOK_WORD TOK_LB simple_expression TOK_RB TOK_OF TOK_WORD TOK_LB simple_expression TOK_RB
|
264
|
+
/ TOK_ARRAY subrange TOK_OF itype
|
265
|
+
end
|
266
|
+
|
267
|
+
rule type
|
268
|
+
itype
|
269
|
+
/ module_type
|
270
|
+
/ TOK_PROCESS module_type
|
271
|
+
end
|
272
|
+
|
273
|
+
rule type_value_list
|
274
|
+
type_value (TOK_COMMA type_value)*
|
275
|
+
end
|
276
|
+
|
277
|
+
rule type_value
|
278
|
+
complex_atom
|
279
|
+
/ integer
|
280
|
+
/ TOK_FALSEEXP
|
281
|
+
/ TOK_TRUEEXP
|
282
|
+
end
|
283
|
+
|
284
|
+
rule complex_atom
|
285
|
+
TOK_ATOM (TOK_DOT TOK_ATOM)*
|
286
|
+
end
|
287
|
+
|
288
|
+
rule module_type
|
289
|
+
name:TOK_ATOM TOK_LP simple_list_expression TOK_RP
|
290
|
+
/ name:TOK_ATOM TOK_LP TOK_RP
|
291
|
+
/ name:TOK_ATOM '' # '' is a workaround to a Treetop limitation
|
292
|
+
/ TOK_ARRAY subrange TOK_OF module_type
|
293
|
+
end
|
294
|
+
|
295
|
+
rule simple_list_expression
|
296
|
+
simple_expression (TOK_COMMA simple_expression)*
|
297
|
+
end
|
298
|
+
|
299
|
+
rule module_list
|
300
|
+
module+
|
301
|
+
end
|
302
|
+
|
303
|
+
rule module
|
304
|
+
TOK_MODULE module_sign decls:declaration* <ModuleDeclarationNode>
|
305
|
+
end
|
306
|
+
|
307
|
+
rule module_sign
|
308
|
+
name:TOK_ATOM (TOK_LP atom_list? TOK_RP)?
|
309
|
+
end
|
310
|
+
|
311
|
+
rule atom_list
|
312
|
+
TOK_ATOM (TOK_COMMA TOK_ATOM)*
|
313
|
+
end
|
314
|
+
|
315
|
+
rule declaration
|
316
|
+
fault
|
317
|
+
/ isa
|
318
|
+
/ var
|
319
|
+
/ input_var
|
320
|
+
/ assign
|
321
|
+
/ init
|
322
|
+
/ invar
|
323
|
+
/ trans
|
324
|
+
/ define
|
325
|
+
/ fairness
|
326
|
+
/ justice
|
327
|
+
/ compassion
|
328
|
+
/ invarspec
|
329
|
+
/ ctlspec
|
330
|
+
/ ltlspec
|
331
|
+
/ compute
|
332
|
+
/ constants
|
333
|
+
end
|
334
|
+
|
335
|
+
rule fault
|
336
|
+
TOK_FAULT id:TOK_ATOM fault_pre fault_effect fault_restores <FaultDeclarationNode>
|
337
|
+
end
|
338
|
+
|
339
|
+
rule fault_pre
|
340
|
+
TOK_PRE TOK_LP simple_expression TOK_RP TOK_SEMI
|
341
|
+
end
|
342
|
+
|
343
|
+
rule fault_effect
|
344
|
+
TOK_EFFECT TOK_LP list:fault_effect_expression_list TOK_RP TOK_SEMI
|
345
|
+
end
|
346
|
+
|
347
|
+
rule fault_effect_expression_list
|
348
|
+
first:fault_effect_expression? rest:(TOK_COMMA fault_effect_expression)*
|
349
|
+
end
|
350
|
+
|
351
|
+
rule fault_effect_expression
|
352
|
+
var_id TOK_EQUAL simple_expression
|
353
|
+
end
|
354
|
+
|
355
|
+
rule fault_restores
|
356
|
+
TOK_RESTORES TOK_LP next_expression TOK_RP TOK_SEMI
|
357
|
+
end
|
358
|
+
|
359
|
+
rule var
|
360
|
+
TOK_VAR var_decl*
|
361
|
+
end
|
362
|
+
|
363
|
+
rule var_decl
|
364
|
+
decl_var_id TOK_COLON type TOK_SEMI <VarDeclNode>
|
365
|
+
end
|
366
|
+
|
367
|
+
rule input_var
|
368
|
+
TOK_IVAR ivar_decl*
|
369
|
+
end
|
370
|
+
|
371
|
+
rule ivar_decl
|
372
|
+
decl_var_id TOK_COLON type TOK_SEMI
|
373
|
+
end
|
374
|
+
|
375
|
+
rule define
|
376
|
+
TOK_DEFINE define_decl+
|
377
|
+
end
|
378
|
+
|
379
|
+
rule define_decl
|
380
|
+
decl_var_id TOK_EQDEF simple_expression TOK_SEMI
|
381
|
+
end
|
382
|
+
|
383
|
+
rule assign
|
384
|
+
TOK_ASSIGN oa:one_assign+
|
385
|
+
end
|
386
|
+
|
387
|
+
rule one_assign
|
388
|
+
var_id TOK_EQDEF simple_expression TOK_SEMI
|
389
|
+
/ TOK_SMALLINIT TOK_LP var_id TOK_RP TOK_EQDEF simple_expression TOK_SEMI
|
390
|
+
/ TOK_NEXT TOK_LP var_id TOK_RP TOK_EQDEF basic_expr TOK_DISABLED_BY TOK_LCB list:fault_list TOK_RCB TOK_SEMI
|
391
|
+
<FaultAssignmentNode>
|
392
|
+
/ TOK_NEXT TOK_LP var_id TOK_RP TOK_EQDEF basic_expr TOK_SEMI <AssignmentNode>
|
393
|
+
end
|
394
|
+
|
395
|
+
rule init
|
396
|
+
TOK_INIT simple_expression TOK_SEMI?
|
397
|
+
end
|
398
|
+
|
399
|
+
rule invar
|
400
|
+
TOK_INVAR simple_expression TOK_SEMI?
|
401
|
+
end
|
402
|
+
|
403
|
+
rule trans
|
404
|
+
TOK_TRANS next_expression TOK_SEMI?
|
405
|
+
end
|
406
|
+
|
407
|
+
rule fairness
|
408
|
+
TOK_FAIRNESS simple_expression TOK_SEMI?
|
409
|
+
end
|
410
|
+
|
411
|
+
rule justice
|
412
|
+
TOK_JUSTICE simple_expression TOK_SEMI?
|
413
|
+
end
|
414
|
+
|
415
|
+
rule compassion
|
416
|
+
TOK_COMPASSION TOK_LP simple_expression TOK_COMMA simple_expression TOK_RP TOK_SEMI?
|
417
|
+
end
|
418
|
+
|
419
|
+
rule invarspec
|
420
|
+
TOK_INVARSPEC simple_expression TOK_SEMI?
|
421
|
+
end
|
422
|
+
|
423
|
+
rule ctlspec
|
424
|
+
TOK_SPEC ctl_expression TOK_SEMI?
|
425
|
+
/ TOK_CTLSPEC ctl_expression TOK_SEMI?
|
426
|
+
end
|
427
|
+
|
428
|
+
rule ltlspec
|
429
|
+
tokspec:TOK_LTLSPEC spec:ltl_expression TOK_SEMI? <LtlSpecNode>
|
430
|
+
end
|
431
|
+
|
432
|
+
rule constants
|
433
|
+
TOK_CONSTANTS constants_expression+
|
434
|
+
end
|
435
|
+
|
436
|
+
rule constants_expression
|
437
|
+
complex_atom (TOK_COMMA complex_atom)*
|
438
|
+
end
|
439
|
+
|
440
|
+
rule compute
|
441
|
+
TOK_COMPUTE compute_expression TOK_SEMI?
|
442
|
+
end
|
443
|
+
|
444
|
+
rule compute_expression
|
445
|
+
TOK_MMIN TOK_LB ctl_expression TOK_COMMA ctl_expression TOK_RB
|
446
|
+
/ TOK_MMAX TOK_LB ctl_expression TOK_COMMA ctl_expression TOK_RB
|
447
|
+
end
|
448
|
+
|
449
|
+
rule isa
|
450
|
+
TOK_ISA TOK_ATOM
|
451
|
+
end
|
452
|
+
|
453
|
+
rule decl_var_id
|
454
|
+
TOK_ATOM decl_var_id_tail
|
455
|
+
end
|
456
|
+
|
457
|
+
rule decl_var_id_tail
|
458
|
+
TOK_DOT TOK_ATOM decl_var_id_tail
|
459
|
+
/ TOK_DOT TOK_NUMBER decl_var_id_tail
|
460
|
+
/ TOK_LB simple_expression TOK_RB decl_var_id_tail
|
461
|
+
/ EPSILON
|
462
|
+
end
|
463
|
+
|
464
|
+
rule var_id
|
465
|
+
TOK_ATOM var_id_tail
|
466
|
+
/ TOK_SELF var_id_tail
|
467
|
+
end
|
468
|
+
|
469
|
+
rule var_id_tail
|
470
|
+
TOK_DOT TOK_ATOM var_id_tail
|
471
|
+
/ TOK_DOT TOK_NUMBER var_id_tail
|
472
|
+
/ TOK_LB simple_expression TOK_RB var_id_tail
|
473
|
+
/ EPSILON
|
474
|
+
end
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
|
@@ -0,0 +1,145 @@
|
|
1
|
+
module Falluto
|
2
|
+
grammar Tokens
|
3
|
+
rule TOK_AND '&' sp end
|
4
|
+
rule TOK_COLON ':' sp end
|
5
|
+
rule TOK_COMMA ',' sp end
|
6
|
+
rule TOK_DOT '.' sp end
|
7
|
+
rule TOK_CONCATENATION '::' sp end
|
8
|
+
rule TOK_DIVIDE '/' sp end
|
9
|
+
rule TOK_EQDEF ':=' sp end
|
10
|
+
rule TOK_EQUAL '=' sp end
|
11
|
+
rule TOK_GE '>=' sp end
|
12
|
+
rule TOK_GT '>' sp end
|
13
|
+
rule TOK_IFF '<->' sp end
|
14
|
+
rule TOK_IMPLIES '->' sp end
|
15
|
+
rule TOK_LB '[' sp end
|
16
|
+
rule TOK_LCB '{' sp end
|
17
|
+
rule TOK_LE '<=' sp end
|
18
|
+
rule TOK_LP '(' sp end
|
19
|
+
rule TOK_LSHIFT '<<' sp end
|
20
|
+
rule TOK_LT '<' sp end
|
21
|
+
rule TOK_MINUS '-' sp end
|
22
|
+
rule TOK_MOD 'mod' eok sp end
|
23
|
+
rule TOK_NOT '!' sp end
|
24
|
+
rule TOK_NOTEQUAL '!=' sp end
|
25
|
+
rule TOK_OR '|' sp end
|
26
|
+
rule TOK_PLUS '+' sp end
|
27
|
+
rule TOK_RB ']' sp end
|
28
|
+
rule TOK_RCB '}' sp end
|
29
|
+
rule TOK_RP ')' sp end
|
30
|
+
rule TOK_RSHIFT '>>' sp end
|
31
|
+
rule TOK_SEMI ';' sp end
|
32
|
+
rule TOK_TWODOTS '..' sp end
|
33
|
+
rule TOK_TIMES '*' sp end
|
34
|
+
rule TOK_XNOR 'xnor' sp end
|
35
|
+
rule TOK_XOR 'xor' sp end
|
36
|
+
|
37
|
+
rule TOK_AA 'A' eok sp end
|
38
|
+
rule TOK_ABF 'ABF' eok sp end
|
39
|
+
rule TOK_ABG 'ABG' eok sp end
|
40
|
+
rule TOK_AF 'AF' eok sp end
|
41
|
+
rule TOK_AG 'AG' eok sp end
|
42
|
+
rule TOK_ARRAY 'array' eok sp end
|
43
|
+
rule TOK_ASSIGN 'ASSIGN' eok sp end
|
44
|
+
rule TOK_AX 'AX' eok sp end
|
45
|
+
rule TOK_BOOLEAN 'boolean' eok sp end
|
46
|
+
rule TOK_BOOL 'bool' eok sp end
|
47
|
+
rule TOK_BUNTIL 'BU' eok sp end
|
48
|
+
rule TOK_CASE 'case' eok sp end
|
49
|
+
rule TOK_COMPASSION 'COMPASSION' eok sp end
|
50
|
+
rule TOK_COMPUTE 'COMPUTE' eok sp end
|
51
|
+
rule TOK_CONSTANTS eok sp end
|
52
|
+
rule TOK_CTLSPEC eok sp end
|
53
|
+
rule TOK_DEFINE 'DEFINE' eok sp end
|
54
|
+
rule TOK_EBF 'EBF' eok sp end
|
55
|
+
rule TOK_EBG 'EBG' eok sp end
|
56
|
+
rule TOK_EE 'É' eok sp end
|
57
|
+
rule TOK_EF 'EF' eok sp end
|
58
|
+
rule TOK_EG 'EG' eok sp end
|
59
|
+
rule TOK_ESAC 'esac' eok sp end
|
60
|
+
rule TOK_EVIL 'evil' eok sp end
|
61
|
+
rule TOK_EX 'EX' eok sp end
|
62
|
+
rule TOK_FAIRNESS 'FAIRNESS' eok sp end
|
63
|
+
rule TOK_FALSEEXP 'FALSE' eok sp end
|
64
|
+
rule TOK_INIT 'INIT' eok sp end
|
65
|
+
rule TOK_INTEGER 'integer' eok sp end
|
66
|
+
rule TOK_INVAR 'INVAR' eok sp end
|
67
|
+
rule TOK_INVARSPEC 'INVARSPEC' eok sp end
|
68
|
+
rule TOK_ISA 'ISA' eok sp end
|
69
|
+
rule TOK_IVAR 'IVAR' eok sp end
|
70
|
+
rule TOK_JUSTICE 'JUSTICE' eok sp end
|
71
|
+
rule TOK_LTLSPEC 'LTLSPEC' eok sp end
|
72
|
+
rule TOK_MMAX 'MAX' eok sp end
|
73
|
+
rule TOK_MMIN 'MIN' eok sp end
|
74
|
+
rule TOK_MODULE 'MODULE' eok sp end
|
75
|
+
rule TOK_NEXT 'next' eok sp end
|
76
|
+
rule TOK_OF 'of' eok sp end
|
77
|
+
rule TOK_OP_FUTURE 'F' eok sp end
|
78
|
+
rule TOK_OP_GLOBAL 'G' eok sp end
|
79
|
+
rule TOK_OP_HISTORICAL 'H' eok sp end
|
80
|
+
rule TOK_OP_NEXT 'X' eok sp end
|
81
|
+
rule TOK_OP_NOTPRECNOT 'Z' eok sp end
|
82
|
+
rule TOK_OP_ONCE 'O' eok sp end
|
83
|
+
rule TOK_OP_PREC 'Y' eok sp end
|
84
|
+
rule TOK_PROCESS 'process' eok sp end
|
85
|
+
rule TOK_RELEASES 'V' eok sp end
|
86
|
+
rule TOK_SELF 'self' eok sp end
|
87
|
+
rule TOK_SETIN 'in' eok sp end
|
88
|
+
rule TOK_SINCE 'S' eok sp end
|
89
|
+
rule TOK_SMALLINIT 'init' eok sp end
|
90
|
+
rule TOK_SPEC 'SPEC' eok sp end
|
91
|
+
rule TOK_TRANS 'TRANS' eok sp end
|
92
|
+
rule TOK_TRIGGERED 'T' eok sp end
|
93
|
+
rule TOK_TRUEEXP 'TRUE' eok sp end
|
94
|
+
rule TOK_UNION 'union' eok sp end
|
95
|
+
rule TOK_UNTIL 'U' eok sp end
|
96
|
+
rule TOK_VAR 'VAR' eok sp end
|
97
|
+
rule TOK_WORD1 'word1' eok sp end
|
98
|
+
rule TOK_WORD 'word' eok sp end
|
99
|
+
|
100
|
+
rule TOK_FAULT 'FAULT' eok sp end
|
101
|
+
rule TOK_PRE 'pre' eok sp end
|
102
|
+
rule TOK_EFFECT 'effect' eok sp end
|
103
|
+
rule TOK_RESTORES 'restores' eok sp end
|
104
|
+
rule TOK_DISABLED_BY 'disabled_by' eok sp end
|
105
|
+
|
106
|
+
rule TOK_NUMBER_WORD
|
107
|
+
'0' [bBoOdDhH] [0-9]* '_' [0-9a-fA-F] [0-9a-fA-F_]*
|
108
|
+
end
|
109
|
+
|
110
|
+
rule keyword
|
111
|
+
TOK_AA / TOK_ABF / TOK_ABG / TOK_AF / TOK_AG / TOK_ARRAY / TOK_ASSIGN
|
112
|
+
/ TOK_AX / TOK_BOOLEAN / TOK_BOOL / TOK_BUNTIL / TOK_CASE / TOK_COMPASSION
|
113
|
+
/ TOK_COMPUTE / TOK_CONSTANTS / TOK_CTLSPEC / TOK_DEFINE /TOK_EBF
|
114
|
+
/ TOK_EBG / TOK_EE / TOK_EF / TOK_EG / TOK_ESAC / TOK_EX
|
115
|
+
/ TOK_FAIRNESS / TOK_FALSEEXP / TOK_INIT / TOK_INTEGER / TOK_INVARSPEC
|
116
|
+
/ TOK_INVAR / TOK_ISA / TOK_IVAR / TOK_JUSTICE / TOK_LTLSPEC / TOK_MMAX
|
117
|
+
/ TOK_MMIN / TOK_MODULE / TOK_NEXT / TOK_OF / TOK_OP_FUTURE
|
118
|
+
/ TOK_OP_GLOBAL / TOK_OP_HISTORICAL / TOK_OP_NEXT / TOK_OP_NOTPRECNOT
|
119
|
+
/ TOK_OP_ONCE / TOK_OP_PREC / TOK_PROCESS / TOK_RELEASES / TOK_SELF
|
120
|
+
/ TOK_SETIN / TOK_SINCE / TOK_SMALLINIT / TOK_SPEC / TOK_TRANS
|
121
|
+
/ TOK_TRIGGERED / TOK_TRUEEXP / TOK_UNION / TOK_UNTIL / TOK_VAR
|
122
|
+
/ TOK_WORD1 / TOK_WORD
|
123
|
+
/ TOK_FAULT / TOK_PRE / TOK_EFFECT / TOK_RESTORES / TOK_DISABLED_BY
|
124
|
+
end
|
125
|
+
|
126
|
+
# Basic Rules
|
127
|
+
rule TOK_NUMBER
|
128
|
+
[0-9]+ sp
|
129
|
+
end
|
130
|
+
|
131
|
+
rule TOK_ATOM
|
132
|
+
!keyword [A-Za-z_] [A-Za-z0-9_$\-\\#]* sp
|
133
|
+
end
|
134
|
+
|
135
|
+
# Useful rules
|
136
|
+
rule idsyms [A-Za-z0-9_$\-\\#] end
|
137
|
+
rule sp (white / comment)* end # Skip optional white space
|
138
|
+
rule white [ \r\n\t] end
|
139
|
+
rule comment '--' (!eoc .)* eoc end
|
140
|
+
rule eok !idsyms end # End Of Keyword
|
141
|
+
rule eoc "\n" / eof end # End Of Comment
|
142
|
+
rule eof !. end # End Of File
|
143
|
+
rule EPSILON '' end
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Falluto
|
2
|
+
module NuSMV
|
3
|
+
class CodeGenerator
|
4
|
+
def define var, expr
|
5
|
+
%Q|DEFINE #{var} := (#{expr});|
|
6
|
+
end
|
7
|
+
|
8
|
+
def variable_declaration var, type
|
9
|
+
%Q|VAR #{var} : #{type};|
|
10
|
+
end
|
11
|
+
|
12
|
+
def fairness expr
|
13
|
+
%Q|FAIRNESS #{expr}|
|
14
|
+
end
|
15
|
+
|
16
|
+
def module signature
|
17
|
+
%Q|MODULE #{signature}|
|
18
|
+
end
|
19
|
+
|
20
|
+
def instance_process type, *args
|
21
|
+
"process #{type}(#{args.join(', ')});"
|
22
|
+
end
|
23
|
+
|
24
|
+
def process type
|
25
|
+
%Q|process #{type}|
|
26
|
+
end
|
27
|
+
|
28
|
+
def ltlspec expr
|
29
|
+
%Q|LTLSPEC #{expr}|
|
30
|
+
end
|
31
|
+
|
32
|
+
def implies(p, q)
|
33
|
+
%Q|((#{p}) -> (#{q}))|
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|