falluto 0.0.1 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|