falluto 0.0.1 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+