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.
@@ -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,7 @@
1
+ require 'treetop'
2
+
3
+ require 'falluto/grammar/nodes'
4
+
5
+ $LOAD_PATH << File.dirname(__FILE__)
6
+ require 'falluto/grammar/tokens'
7
+ require 'falluto/grammar/rules'
@@ -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
+