package asli

  1. Overview
  2. Docs
Interpreter for Arm's Architecture Specification Language (ASL)

Install

Dune Dependency

Authors

Maintainers

Sources

0.2.0.tar.gz
md5=f4581fd209256823fa4d569ac96c8cee
sha512=fd4a74294beb9eeeafa80c9224b5dc30f5e5ebde4d53fa601929d283b6ca72154de313874321774914f738ac6f0d640e59452f7d03cb1db7b3a019b48b82e0d4

doc/src/asli.libASL/asl_parser_pp.ml.html

Source file asl_parser_pp.ml

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
(* generated by Ott 0.30 from: asl.ott *)
open PPrintEngine
open PPrintCombinators
open Asl_ast

let rec pp_raw_l l = PPrintEngine.string (pp_loc l)

and pp_raw_ident l = PPrintEngine.string (pprint_ident l)

and pp_raw_typeident l = PPrintEngine.string (pprint_ident l)

and pp_raw_leadingblank x = match x with
| LeadingBlank -> string "LeadingBlank"
| LeadingNothing -> string "LeadingNothing"

and pp_raw_declarations es = string "[ "^^ separate (string ";\n") (List.map pp_raw_declaration es) ^^ string " ]"

and pp_raw_declaration x = match x with
| Decl_BuiltinType(tidentdecl,ott_menhir_loc) -> string "Decl_BuiltinType" ^^ string "(" ^^ pp_raw_qualident tidentdecl ^^ string ")"
| Decl_Forward(tidentdecl,ott_menhir_loc) -> string "Decl_Forward" ^^ string "(" ^^ pp_raw_qualident tidentdecl ^^ string ")"
| Decl_Record(tidentdecl,field0,ott_menhir_loc) -> string "Decl_Record" ^^ string "(" ^^ pp_raw_qualident tidentdecl ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (field0) -> string "(" ^^ pp_raw_field field0 ^^ string ")") field0) ^^ string "]" ^^ string ")"
| Decl_Typedef(tidentdecl,ty,ott_menhir_loc) -> string "Decl_Typedef" ^^ string "(" ^^ pp_raw_qualident tidentdecl ^^ string "," ^^ pp_raw_ty ty ^^ string ")"
| Decl_Enum(tidentdecl,ident0,ott_menhir_loc) -> string "Decl_Enum" ^^ string "(" ^^ pp_raw_qualident tidentdecl ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| Decl_Var(ty,qualident,ott_menhir_loc) -> string "Decl_Var" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string ")"
| Decl_Const(ty,qualident,expr,ott_menhir_loc) -> string "Decl_Const" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Decl_BuiltinFunction(ty,qualident,formal0,ott_menhir_loc) -> string "Decl_BuiltinFunction" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string ")"
| Decl_FunType(ty,qualident,formal0,ott_menhir_loc) -> string "Decl_FunType" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string ")"
| Decl_FunDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "Decl_FunDefn" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_ProcType(qualident,formal0,ott_menhir_loc) -> string "Decl_ProcType" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string ")"
| Decl_ProcDefn(qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "Decl_ProcDefn" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_VarGetterType(ty,qualident,ott_menhir_loc) -> string "Decl_VarGetterType" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string ")"
| Decl_VarGetterDefn(ty,qualident,opt_indented_block,ott_menhir_loc) -> string "Decl_VarGetterDefn" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_ArrayGetterType(ty,qualident,formal0,ott_menhir_loc) -> string "Decl_ArrayGetterType" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string ")"
| Decl_ArrayGetterDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "Decl_ArrayGetterDefn" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_VarSetterType(qualident,ty,ident,ott_menhir_loc) -> string "Decl_VarSetterType" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string ")"
| Decl_VarSetterDefn(qualident,ty,ident,opt_indented_block,ott_menhir_loc) -> string "Decl_VarSetterDefn" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_ArraySetterType(qualident,sformal0,ty,ident,ott_menhir_loc) -> string "Decl_ArraySetterType" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (sformal0) -> string "(" ^^ pp_raw_sformal sformal0 ^^ string ")") sformal0) ^^ string "]" ^^ string "," ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string ")"
| Decl_ArraySetterDefn(qualident,sformal0,ty,ident,opt_indented_block,ott_menhir_loc) -> string "Decl_ArraySetterDefn" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (sformal0) -> string "(" ^^ pp_raw_sformal sformal0 ^^ string ")") sformal0) ^^ string "]" ^^ string "," ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_InstructionDefn(ident,encoding0,opt_postdecode,opt_conditional,opt_indented_block,ott_menhir_loc) -> string "Decl_InstructionDefn" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (encoding0) -> string "(" ^^ pp_raw_encoding encoding0 ^^ string ")") encoding0) ^^ string "]" ^^ string "," ^^ pp_raw_opt_postdecode opt_postdecode ^^ string "," ^^ pp_raw_opt_conditional opt_conditional ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_DecoderDefn(ident,decode_case,ott_menhir_loc) -> string "Decl_DecoderDefn" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_decode_case decode_case ^^ string ")"
| Decl_Operator1(unop,ident0,ott_menhir_loc) -> string "Decl_Operator1" ^^ string "(" ^^ pp_raw_unop unop ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| Decl_Operator2(binop_or_concat,ident0,ott_menhir_loc) -> string "Decl_Operator2" ^^ string "(" ^^ pp_raw_binop binop_or_concat ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| Decl_NewEventDefn(qualident,formal0,ott_menhir_loc) -> string "Decl_NewEventDefn" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string ")"
| Decl_EventClause(qualident,possibly_empty_block,ott_menhir_loc) -> string "Decl_EventClause" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_indented_block possibly_empty_block ^^ string ")"
| Decl_NewMapDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "Decl_NewMapDefn" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (formal0) -> string "(" ^^ pp_raw_formal formal0 ^^ string ")") formal0) ^^ string "]" ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"
| Decl_MapClause(qualident,mapfield0,optmapcond,possibly_empty_block,ott_menhir_loc) -> string "Decl_MapClause" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (mapfield0) -> string "(" ^^ pp_raw_mapfield mapfield0 ^^ string ")") mapfield0) ^^ string "]" ^^ string "," ^^ pp_raw_optmapcond optmapcond ^^ string "," ^^ pp_raw_indented_block possibly_empty_block ^^ string ")"
| Decl_Config(ty,qualident,expr,ott_menhir_loc) -> string "Decl_Config" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_qualident qualident ^^ string "," ^^ pp_raw_expr expr ^^ string ")"

and pp_raw_field_ns f = string "(" ^^ pp_raw_ty (fst f) ^^ string ", " ^^ string (snd f) ^^ string ")"

and pp_raw_field f = string "(" ^^ pp_raw_ty (fst f) ^^ string ", " ^^ pp_raw_ident (snd f) ^^ string ")"

and pp_raw_ixtype x = match x with
| Index_Enum(tident) -> string "Index_Enum" ^^ string "(" ^^ pp_raw_qualident tident ^^ string ")"
| Index_Range(expr1,expr2) -> string "Index_Range" ^^ string "(" ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"

and pp_raw_formal f = string "(" ^^ pp_raw_ty (fst f) ^^ string ", " ^^ pp_raw_ident (snd f) ^^ string ")"

and pp_raw_sformal x = match x with
| Formal_In(ty,ident) -> string "Formal_In" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string ")"
| Formal_InOut(ty,ident) -> string "Formal_InOut" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string ")"

and pp_raw_encoding x = match x with
| Encoding_Block(ident1,ident2,instr_field0,opcode_value,expr,instr_unpred0,opt_indented_block,ott_menhir_loc) -> string "Encoding_Block" ^^ string "(" ^^ pp_raw_ident ident1 ^^ string "," ^^ pp_raw_ident ident2 ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (instr_field0) -> string "(" ^^ pp_raw_instr_field instr_field0 ^^ string ")") instr_field0) ^^ string "]" ^^ string "," ^^ pp_raw_opcode_value opcode_value ^^ string "," ^^ pp_raw_expr expr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (instr_unpred0) -> string "(" ^^ pp_raw_instr_unpred instr_unpred0 ^^ string ")") instr_unpred0) ^^ string "]" ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"

and pp_raw_opt_conditional x = if x then string "__conditional" else string ""

and pp_raw_opt_postdecode x = match x with Some(ys) -> string "Some(" ^^ separate (string "\n") (List.map pp_raw_stmt ys) ^^ string ")" | None -> string "None"

and pp_raw_instr_field x = match x with
| IField_Field(ident,offset1,offset2) -> string "IField_Field" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_offset offset1 ^^ string "," ^^ pp_raw_offset offset2 ^^ string ")"

and pp_raw_offset x = string "??"

and pp_raw_opcode_value x = match x with
| Opcode_Bits(bitsLit) -> string "Opcode_Bits" ^^ string "(" ^^  string "\"" ^^ string bitsLit ^^ string "\"" ^^ string ")"
| Opcode_Mask(maskLit) -> string "Opcode_Mask" ^^ string "(" ^^  string "\"" ^^ string maskLit ^^ string "\"" ^^ string ")"

and pp_raw_instr_unpred x = string "??"

and pp_raw_decode_case x = match x with
| DecoderCase_Case(decode_slice0,decode_alt0,ott_menhir_loc) -> string "DecoderCase_Case" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (decode_slice0) -> string "(" ^^ pp_raw_decode_slice decode_slice0 ^^ string ")") decode_slice0) ^^ string "]" ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (decode_alt0) -> string "(" ^^ pp_raw_decode_alt decode_alt0 ^^ string ")") decode_alt0) ^^ string "]" ^^ string ")"

and pp_raw_decode_slice x = match x with
| DecoderSlice_Slice(offset1,offset2) -> string "DecoderSlice_Slice" ^^ string "(" ^^ pp_raw_offset offset1 ^^ string "," ^^ pp_raw_offset offset2 ^^ string ")"
| DecoderSlice_FieldName(ident) -> string "DecoderSlice_FieldName" ^^ string "(" ^^ pp_raw_ident ident ^^ string ")"
| DecoderSlice_Concat(ident0) -> string "DecoderSlice_Concat" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"

and pp_raw_decode_alt x = match x with
| DecoderAlt_Alt(decode_pattern0,decode_body) -> string "DecoderAlt_Alt" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (decode_pattern0) -> string "(" ^^ pp_raw_decode_pattern decode_pattern0 ^^ string ")") decode_pattern0) ^^ string "]" ^^ string "," ^^ pp_raw_decode_body decode_body ^^ string ")"

and pp_raw_decode_pattern x = match x with
| DecoderPattern_Bits(bitsLit) -> string "DecoderPattern_Bits" ^^ string "(" ^^  string "\"" ^^ string bitsLit ^^ string "\"" ^^ string ")"
| DecoderPattern_Mask(maskLit) -> string "DecoderPattern_Mask" ^^ string "(" ^^  string "\"" ^^ string maskLit ^^ string "\"" ^^ string ")"
| DecoderPattern_Wildcard(ident) -> string "DecoderPattern_Wildcard" ^^ string "(" ^^ pp_raw_ident ident ^^ string ")"
| DecoderPattern_Not(decode_pattern) -> string "DecoderPattern_Not" ^^ string "(" ^^ pp_raw_decode_pattern decode_pattern ^^ string ")"

and pp_raw_decode_body x = match x with
| DecoderBody_UNPRED(ott_menhir_loc) -> string "DecoderBody_UNPRED"
| DecoderBody_UNALLOC(ott_menhir_loc) -> string "DecoderBody_UNALLOC"
| DecoderBody_NOP(ott_menhir_loc) -> string "DecoderBody_NOP"
| DecoderBody_Encoding(ident,ott_menhir_loc) -> string "DecoderBody_Encoding" ^^ string "(" ^^ pp_raw_ident ident ^^ string ")"
| DecoderBody_Decoder(instr_field0,decode_case,ott_menhir_loc) -> string "DecoderBody_Decoder" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (instr_field0) -> string "(" ^^ pp_raw_instr_field instr_field0 ^^ string ")") instr_field0) ^^ string "]" ^^ string "," ^^ pp_raw_decode_case decode_case ^^ string ")"

and pp_raw_operator x = string x

and pp_raw_optmapcond x = match x with Some(y) -> string "Some(" ^^ pp_raw_expr y ^^ string ")" | None -> string "None"

and pp_raw_mapfield x = match x with
| MapField_Field(ident,pattern) -> string "MapField_Field" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_pattern pattern ^^ string ")"

and pp_raw_qualident x = pp_raw_ident x

and pp_raw_ty x = match x with
| Type_Constructor(tident) -> string "Type_Constructor" ^^ string "(" ^^ pp_raw_qualident tident ^^ string ")"
| Type_Bits(expr) -> string "Type_Bits" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Type_App(tident,expr0) -> string "Type_App" ^^ string "(" ^^ pp_raw_qualident tident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"
| Type_OfExpr(expr) -> string "Type_OfExpr" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Type_Register(intLit,regfields) -> string "Type_Register" ^^ string "(" ^^  string "\"" ^^ string intLit ^^ string "\"" ^^ string "," ^^ pp_raw_regfields regfields ^^ string ")"
| Type_Array(ixtype,ty) -> string "Type_Array" ^^ string "(" ^^ pp_raw_ixtype ixtype ^^ string "," ^^ pp_raw_ty ty ^^ string ")"
| Type_Tuple(ty0) -> string "Type_Tuple" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (ty0) -> string "(" ^^ pp_raw_ty ty0 ^^ string ")") ty0) ^^ string "]" ^^ string ")"

and pp_raw_regfields rfs = separate (string ",\n") (List.map pp_raw_regfield rfs)

and pp_raw_regfield rf = string "([ "^^ separate (string ";\n") (List.map pp_raw_slice (fst rf)) ^^ string " ], " ^^ pp_raw_ident (snd rf) ^^ string ")"

and pp_raw_stmt x = match x with
| Stmt_VarDeclsNoInit(ty,ident0,ott_menhir_loc) -> string "Stmt_VarDeclsNoInit" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| Stmt_VarDecl(ty,ident,expr,ott_menhir_loc) -> string "Stmt_VarDecl" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Stmt_ConstDecl(ty,ident,expr,ott_menhir_loc) -> string "Stmt_ConstDecl" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Stmt_Assign(lexpr,expr,ott_menhir_loc) -> string "Stmt_Assign" ^^ string "(" ^^ pp_raw_lexpr lexpr ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Stmt_FunReturn(expr,ott_menhir_loc) -> string "Stmt_FunReturn" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Stmt_ProcReturn(ott_menhir_loc) -> string "Stmt_ProcReturn"
| Stmt_Assert(expr,ott_menhir_loc) -> string "Stmt_Assert" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Stmt_Unpred(ott_menhir_loc) -> string "Stmt_Unpred"
| Stmt_ConstrainedUnpred(ott_menhir_loc) -> string "Stmt_ConstrainedUnpred"
| Stmt_ImpDef(ident,ott_menhir_loc) -> string "Stmt_ImpDef" ^^ string "(" ^^ pp_raw_ident ident ^^ string ")"
| Stmt_Undefined(ott_menhir_loc) -> string "Stmt_Undefined"
| Stmt_ExceptionTaken(ott_menhir_loc) -> string "Stmt_ExceptionTaken"
| Stmt_Dep_Unpred(ott_menhir_loc) -> string "Stmt_Dep_Unpred"
| Stmt_Dep_ImpDef(stringLit,ott_menhir_loc) -> string "Stmt_Dep_ImpDef" ^^ string "(" ^^  string "\"" ^^ string stringLit ^^ string "\"" ^^ string ")"
| Stmt_Dep_Undefined(ott_menhir_loc) -> string "Stmt_Dep_Undefined"
| Stmt_See(expr,ott_menhir_loc) -> string "Stmt_See" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Stmt_Throw(ident,ott_menhir_loc) -> string "Stmt_Throw" ^^ string "(" ^^ pp_raw_ident ident ^^ string ")"
| Stmt_DecodeExecute(ident,expr,ott_menhir_loc) -> string "Stmt_DecodeExecute" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Stmt_TCall(qualident,expr0_prime,expr0,ott_menhir_loc) -> string "Stmt_TCall" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0_prime) -> string "(" ^^ pp_raw_expr expr0_prime ^^ string ")") expr0_prime) ^^ string "]" ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"
| Stmt_If(expr,opt_indented_block,s_elsif0,optional_else,ott_menhir_loc) -> string "Stmt_If" ^^ string "(" ^^ pp_raw_expr expr ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (s_elsif0) -> string "(" ^^ pp_raw_s_elsif s_elsif0 ^^ string ")") s_elsif0) ^^ string "]" ^^ string "," ^^ pp_raw_optional_else optional_else ^^ string ")"
| Stmt_Case(expr,alt0,opt_otherwise,ott_menhir_loc) -> string "Stmt_Case" ^^ string "(" ^^ pp_raw_expr expr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (alt0) -> string "(" ^^ pp_raw_alt alt0 ^^ string ")") alt0) ^^ string "]" ^^ string "," ^^ pp_raw_opt_otherwise opt_otherwise ^^ string ")"
| Stmt_For(ident,expr1,direction,expr2,indented_block,ott_menhir_loc) -> string "Stmt_For" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_direction direction ^^ string "," ^^ pp_raw_expr expr2 ^^ string "," ^^ pp_raw_indented_block indented_block ^^ string ")"
| Stmt_While(expr,indented_block,ott_menhir_loc) -> string "Stmt_While" ^^ string "(" ^^ pp_raw_expr expr ^^ string "," ^^ pp_raw_indented_block indented_block ^^ string ")"
| Stmt_Repeat(indented_block,expr,ott_menhir_loc) -> string "Stmt_Repeat" ^^ string "(" ^^ pp_raw_indented_block indented_block ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| Stmt_Try(indented_block,ident,catcher0,opt_otherwise,ott_menhir_loc) -> string "Stmt_Try" ^^ string "(" ^^ pp_raw_indented_block indented_block ^^ string "," ^^ pp_raw_ident ident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (catcher0) -> string "(" ^^ pp_raw_catcher catcher0 ^^ string ")") catcher0) ^^ string "]" ^^ string "," ^^ pp_raw_opt_otherwise opt_otherwise ^^ string ")"

and pp_raw_indented_block x = (nest 4 (lbracket
                          ^^ hardline
                          ^^ (separate hardline (List.map pp_raw_stmt x))))
                  ^^ hardline
                  ^^ rbracket

and pp_raw_lexpr x = match x with
| LExpr_Wildcard -> string "LExpr_Wildcard"
| LExpr_Var(qualident) -> string "LExpr_Var" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string ")"
| LExpr_Field(lexpr,ident) -> string "LExpr_Field" ^^ string "(" ^^ pp_raw_lexpr lexpr ^^ string "," ^^ pp_raw_ident ident ^^ string ")"
| LExpr_Fields(lexpr,ident0) -> string "LExpr_Fields" ^^ string "(" ^^ pp_raw_lexpr lexpr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| LExpr_Slices(lexpr,slice0) -> string "LExpr_Slices" ^^ string "(" ^^ pp_raw_lexpr lexpr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (slice0) -> string "(" ^^ pp_raw_slice slice0 ^^ string ")") slice0) ^^ string "]" ^^ string ")"
| LExpr_BitTuple(lexpr0) -> string "LExpr_BitTuple" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (lexpr0) -> string "(" ^^ pp_raw_lexpr lexpr0 ^^ string ")") lexpr0) ^^ string "]" ^^ string ")"
| LExpr_Tuple(lexpr0) -> string "LExpr_Tuple" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (lexpr0) -> string "(" ^^ pp_raw_lexpr lexpr0 ^^ string ")") lexpr0) ^^ string "]" ^^ string ")"
| LExpr_Array(lexpr,expr) -> string "LExpr_Array" ^^ string "(" ^^ pp_raw_lexpr lexpr ^^ string "," ^^ pp_raw_expr expr ^^ string ")"
| LExpr_Write(ident,expr0_prime,expr0) -> string "LExpr_Write" ^^ string "(" ^^ pp_raw_ident ident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0_prime) -> string "(" ^^ pp_raw_expr expr0_prime ^^ string ")") expr0_prime) ^^ string "]" ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"
| LExpr_ReadWrite(ident1,ident2,expr0_prime,expr0) -> string "LExpr_ReadWrite" ^^ string "(" ^^ pp_raw_ident ident1 ^^ string "," ^^ pp_raw_ident ident2 ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0_prime) -> string "(" ^^ pp_raw_expr expr0_prime ^^ string ")") expr0_prime) ^^ string "]" ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"

and pp_raw_s_elsif x = match x with
| S_Elsif_Cond(expr,opt_indented_block) -> string "S_Elsif_Cond" ^^ string "(" ^^ pp_raw_expr expr ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"

and pp_raw_optional_else x = match x with [] -> string ""
                             | ys -> string "(else " ^^ separate (string "\n") (List.map pp_raw_stmt ys) ^^ string ")"

and pp_raw_alt x = match x with
| Alt_Alt(pattern0,opt_altcond,possibly_empty_block) -> string "Alt_Alt" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (pattern0) -> string "(" ^^ pp_raw_pattern pattern0 ^^ string ")") pattern0) ^^ string "]" ^^ string "," ^^ pp_raw_opt_altcond opt_altcond ^^ string "," ^^ pp_raw_indented_block possibly_empty_block ^^ string ")"

and pp_raw_opt_otherwise x = match x with Some(ys) -> string "Some(" ^^ separate (string "\n") (List.map pp_raw_stmt ys) ^^ string ")" | None -> string "None"

and pp_raw_opt_altcond x = match x with Some(y) -> string "Some(" ^^ pp_raw_expr y ^^ string ")" | None -> string "None"

and pp_raw_pattern x = match x with
| Pat_LitInt(intLit) -> string "Pat_LitInt" ^^ string "(" ^^  string "\"" ^^ string intLit ^^ string "\"" ^^ string ")"
| Pat_LitHex(hexLit) -> string "Pat_LitHex" ^^ string "(" ^^  string "\"" ^^ string hexLit ^^ string "\"" ^^ string ")"
| Pat_LitBits(bitsLit) -> string "Pat_LitBits" ^^ string "(" ^^  string "\"" ^^ string bitsLit ^^ string "\"" ^^ string ")"
| Pat_LitMask(maskLit) -> string "Pat_LitMask" ^^ string "(" ^^  string "\"" ^^ string maskLit ^^ string "\"" ^^ string ")"
| Pat_Const(qualident) -> string "Pat_Const" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string ")"
| Pat_Wildcard -> string "Pat_Wildcard"
| Pat_Tuple(pattern0) -> string "Pat_Tuple" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (pattern0) -> string "(" ^^ pp_raw_pattern pattern0 ^^ string ")") pattern0) ^^ string "]" ^^ string ")"
| Pat_Set(apattern0) -> string "Pat_Set" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (apattern0) -> string "(" ^^ pp_raw_pattern apattern0 ^^ string ")") apattern0) ^^ string "]" ^^ string ")"
| Pat_Range(expr1,expr2) -> string "Pat_Range" ^^ string "(" ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"
| Pat_Single(expr) -> string "Pat_Single" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"

and pp_raw_direction x = match x with
| Direction_Up -> string "Direction_Up"
| Direction_Down -> string "Direction_Down"

and pp_raw_catcher x = match x with
| Catcher_Guarded(expr,opt_indented_block) -> string "Catcher_Guarded" ^^ string "(" ^^ pp_raw_expr expr ^^ string "," ^^ pp_raw_indented_block opt_indented_block ^^ string ")"

and pp_raw_expr x = match x with
| Expr_If(cexpr1,expr1,e_elsif0,expr2) -> string "Expr_If" ^^ string "(" ^^ pp_raw_expr cexpr1 ^^ string "," ^^ pp_raw_expr expr1 ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (e_elsif0) -> string "(" ^^ pp_raw_e_elsif e_elsif0 ^^ string ")") e_elsif0) ^^ string "]" ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"
| Expr_Binop(expr1,binop,expr2) -> string "Expr_Binop" ^^ string "(" ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_binop binop ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"
| Expr_Unop(unop,fexpr) -> string "Expr_Unop" ^^ string "(" ^^ pp_raw_unop unop ^^ string "," ^^ pp_raw_expr fexpr ^^ string ")"
| Expr_Field(fexpr,ident) -> string "Expr_Field" ^^ string "(" ^^ pp_raw_expr fexpr ^^ string "," ^^ pp_raw_ident ident ^^ string ")"
| Expr_Fields(fexpr,ident0) -> string "Expr_Fields" ^^ string "(" ^^ pp_raw_expr fexpr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (ident0) -> string "(" ^^ pp_raw_ident ident0 ^^ string ")") ident0) ^^ string "]" ^^ string ")"
| Expr_Slices(fexpr,slice0) -> string "Expr_Slices" ^^ string "(" ^^ pp_raw_expr fexpr ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (slice0) -> string "(" ^^ pp_raw_slice slice0 ^^ string ")") slice0) ^^ string "]" ^^ string ")"
| Expr_In(fexpr,pattern) -> string "Expr_In" ^^ string "(" ^^ pp_raw_expr fexpr ^^ string "," ^^ pp_raw_pattern pattern ^^ string ")"
| Expr_Var(qualident) -> string "Expr_Var" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string ")"
| Expr_Parens(expr) -> string "Expr_Parens" ^^ string "(" ^^ pp_raw_expr expr ^^ string ")"
| Expr_Tuple(expr0) -> string "Expr_Tuple" ^^ string "(" ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"
| Expr_Unknown(ty) -> string "Expr_Unknown" ^^ string "(" ^^ pp_raw_ty ty ^^ string ")"
| Expr_ImpDef(ty,opt_stringLit) -> string "Expr_ImpDef" ^^ string "(" ^^ pp_raw_ty ty ^^ string "," ^^ pp_raw_opt_stringLit opt_stringLit ^^ string ")"
| Expr_TApply(qualident,expr0_prime,expr0) -> string "Expr_TApply" ^^ string "(" ^^ pp_raw_qualident qualident ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0_prime) -> string "(" ^^ pp_raw_expr expr0_prime ^^ string ")") expr0_prime) ^^ string "]" ^^ string "," ^^ string "[" ^^ separate  (string ";") (List.map (function (expr0) -> string "(" ^^ pp_raw_expr expr0 ^^ string ")") expr0) ^^ string "]" ^^ string ")"
| Expr_Array(expr1,expr2) -> string "Expr_Array" ^^ string "(" ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"
| Expr_LitInt(intLit) -> string "Expr_LitInt" ^^ string "(" ^^  string "\"" ^^ string intLit ^^ string "\"" ^^ string ")"
| Expr_LitHex(hexLit) -> string "Expr_LitHex" ^^ string "(" ^^  string "\"" ^^ string hexLit ^^ string "\"" ^^ string ")"
| Expr_LitReal(realLit) -> string "Expr_LitReal" ^^ string "(" ^^  string "\"" ^^ string realLit ^^ string "\"" ^^ string ")"
| Expr_LitBits(bitsLit) -> string "Expr_LitBits" ^^ string "(" ^^  string "\"" ^^ string bitsLit ^^ string "\"" ^^ string ")"
| Expr_LitMask(maskLit) -> string "Expr_LitMask" ^^ string "(" ^^  string "\"" ^^ string maskLit ^^ string "\"" ^^ string ")"
| Expr_LitString(stringLit) -> string "Expr_LitString" ^^ string "(" ^^  string "\"" ^^ string stringLit ^^ string "\"" ^^ string ")"

and pp_raw_e_elsif x = match x with
| E_Elsif_Cond(expr1,expr2) -> string "E_Elsif_Cond" ^^ string "(" ^^ pp_raw_expr expr1 ^^ string "," ^^ pp_raw_expr expr2 ^^ string ")"

and pp_raw_factor x = match x with
| Factor_BinOp(binop_or_concat,bexpr) -> string "Factor_BinOp" ^^ string "(" ^^ pp_raw_binop binop_or_concat ^^ string "," ^^ pp_raw_expr bexpr ^^ string ")"

and pp_raw_binop x = match x with
| Binop_Eq -> string "Binop_Eq"
| Binop_NtEq -> string "Binop_NtEq"
| Binop_Gt -> string "Binop_Gt"
| Binop_GtEq -> string "Binop_GtEq"
| Binop_Lt -> string "Binop_Lt"
| Binop_LtEq -> string "Binop_LtEq"
| Binop_Plus -> string "Binop_Plus"
| Binop_Minus -> string "Binop_Minus"
| Binop_Multiply -> string "Binop_Multiply"
| Binop_Divide -> string "Binop_Divide"
| Binop_Power -> string "Binop_Power"
| Binop_Quot -> string "Binop_Quot"
| Binop_Rem -> string "Binop_Rem"
| Binop_Div -> string "Binop_Div"
| Binop_Mod -> string "Binop_Mod"
| Binop_ShiftL -> string "Binop_ShiftL"
| Binop_ShiftR -> string "Binop_ShiftR"
| Binop_BoolAnd -> string "Binop_BoolAnd"
| Binop_BoolOr -> string "Binop_BoolOr"
| Binop_BoolIff -> string "Binop_BoolIff"
| Binop_BoolImplies -> string "Binop_BoolImplies"
| Binop_BitOr -> string "Binop_BitOr"
| Binop_BitEor -> string "Binop_BitEor"
| Binop_BitAnd -> string "Binop_BitAnd"
| Binop_Append -> string "Binop_Append"
| Binop_Concat -> string "Binop_Concat"
| Binop_DUMMY -> string "Binop_DUMMY"

and pp_raw_opt_stringLit x = match x with Some(y) -> string "Some(" ^^ string y ^^ string ")" | None -> string "None"

and pp_raw_unop x = match x with
| Unop_Negate -> string "Unop_Negate"
| Unop_BoolNot -> string "Unop_BoolNot"
| Unop_BitsNot -> string "Unop_BitsNot"

and pp_raw_slice x = match x with
| Slice_Single(sexpr) -> string "Slice_Single" ^^ string "(" ^^ pp_raw_expr sexpr ^^ string ")"
| Slice_HiLo(sexpr1,sexpr2) -> string "Slice_HiLo" ^^ string "(" ^^ pp_raw_expr sexpr1 ^^ string "," ^^ pp_raw_expr sexpr2 ^^ string ")"
| Slice_LoWd(sexpr1,sexpr2) -> string "Slice_LoWd" ^^ string "(" ^^ pp_raw_expr sexpr1 ^^ string "," ^^ pp_raw_expr sexpr2 ^^ string ")"

and pp_raw_expr_command x = pp_raw_expr x

and pp_raw_stmt_command x = pp_raw_stmt x

and pp_raw_impdef_command x = match x with
| CLI_Impdef(stringLit,expr) -> string "CLI_Impdef" ^^ string "(" ^^  string "\"" ^^ string stringLit ^^ string "\"" ^^ string "," ^^ pp_raw_expr expr ^^ string ")"


let rec pp_l l = pp_loc l

and pp_ident l = PPrintEngine.string (pprint_ident l)

and pp_typeident l = PPrintEngine.string (pprint_ident l)

and pp_leadingblank x = match x with
| LeadingBlank -> string "EOL"
| LeadingNothing -> string ""

and pp_declarations es = separate (string "\n") (List.map pp_declaration es)

and pp_declaration x = match x with
| Decl_BuiltinType(tidentdecl,ott_menhir_loc) -> string "(" ^^ string "__builtin" ^^ string " " ^^ string "type" ^^ string " " ^^ pp_qualident tidentdecl ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Forward(tidentdecl,ott_menhir_loc) -> string "(" ^^ string "type" ^^ string " " ^^ pp_qualident tidentdecl ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Record(tidentdecl,field0,ott_menhir_loc) -> string "(" ^^ string "record" ^^ string " " ^^ pp_qualident tidentdecl ^^ string " " ^^ string "{" ^^ string " " ^^ separate (string " ") (List.map (function (field0) -> pp_field field0) field0) ^^ string " " ^^ string "}" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Typedef(tidentdecl,ty,ott_menhir_loc) -> string "(" ^^ string "type" ^^ string " " ^^ pp_qualident tidentdecl ^^ string " " ^^ string "=" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Enum(tidentdecl,ident0,ott_menhir_loc) -> string "(" ^^ string "enumeration" ^^ string " " ^^ pp_qualident tidentdecl ^^ string " " ^^ string "{" ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string "}" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Var(ty,qualident,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Const(ty,qualident,expr,ott_menhir_loc) -> string "(" ^^ string "constant" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_BuiltinFunction(ty,qualident,formal0,ott_menhir_loc) -> string "(" ^^ string "__builtin" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_FunType(ty,qualident,formal0,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_FunDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_ProcType(qualident,formal0,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_ProcDefn(qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_VarGetterType(ty,qualident,ott_menhir_loc) -> string "(" ^^ string "__function" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_VarGetterDefn(ty,qualident,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_ArrayGetterType(ty,qualident,formal0,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string "]" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_ArrayGetterDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string "]" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_VarSetterType(qualident,ty,ident,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_VarSetterDefn(qualident,ty,ident,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_ArraySetterType(qualident,sformal0,ty,ident,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (sformal0) -> pp_sformal sformal0) sformal0) ^^ string " " ^^ string "]" ^^ string " " ^^ string "=" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_ArraySetterDefn(qualident,sformal0,ty,ident,opt_indented_block,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (sformal0) -> pp_sformal sformal0) sformal0) ^^ string " " ^^ string "]" ^^ string " " ^^ string "=" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_InstructionDefn(ident,encoding0,opt_postdecode,opt_conditional,opt_indented_block,ott_menhir_loc) -> string "(" ^^ string "__instruction" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ separate (string " ") (List.map (function (encoding0) -> pp_encoding encoding0) encoding0) ^^ string " " ^^ pp_opt_postdecode opt_postdecode ^^ string " " ^^ string "__execute" ^^ string " " ^^ pp_opt_conditional opt_conditional ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string " " ^^ string "DEDENT" ^^ string ")"
| Decl_DecoderDefn(ident,decode_case,ott_menhir_loc) -> string "(" ^^ string "__decode" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ pp_decode_case decode_case ^^ string " " ^^ string "DEDENT" ^^ string ")"
| Decl_Operator1(unop,ident0,ott_menhir_loc) -> string "(" ^^ string "__operator1" ^^ string " " ^^ pp_unop unop ^^ string " " ^^ string "=" ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_Operator2(binop_or_concat,ident0,ott_menhir_loc) -> string "(" ^^ string "__operator2" ^^ string " " ^^ pp_binop binop_or_concat ^^ string " " ^^ string "=" ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_NewEventDefn(qualident,formal0,ott_menhir_loc) -> string "(" ^^ string "__newevent" ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Decl_EventClause(qualident,possibly_empty_block,ott_menhir_loc) -> string "(" ^^ string "__event" ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ pp_indented_block possibly_empty_block ^^ string ")"
| Decl_NewMapDefn(ty,qualident,formal0,opt_indented_block,ott_menhir_loc) -> string "(" ^^ string "__newmap" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (formal0) -> pp_formal formal0) formal0) ^^ string " " ^^ string ")" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"
| Decl_MapClause(qualident,mapfield0,optmapcond,possibly_empty_block,ott_menhir_loc) -> string "(" ^^ string "__map" ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ separate (string ",") (List.map (function (mapfield0) -> pp_mapfield mapfield0) mapfield0) ^^ string " " ^^ pp_optmapcond optmapcond ^^ string " " ^^ string "then" ^^ string " " ^^ pp_indented_block possibly_empty_block ^^ string ")"
| Decl_Config(ty,qualident,expr,ott_menhir_loc) -> string "(" ^^ string "__config" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_qualident qualident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"

and pp_field_ns f     = pp_ty (fst f) ^^ string " " ^^ string (snd f)

and pp_field f     = pp_ty (fst f) ^^ string " " ^^ pp_ident (snd f)

and pp_ixtype x = match x with
| Index_Enum(tident) -> pp_qualident tident
| Index_Range(expr1,expr2) -> string "(" ^^ pp_expr expr1 ^^ string " " ^^ string ".." ^^ string " " ^^ pp_expr expr2 ^^ string ")"

and pp_formal f     = pp_ty (fst f) ^^ string " " ^^ pp_ident (snd f)

and pp_sformal x = match x with
| Formal_In(ty,ident) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string ")"
| Formal_InOut(ty,ident) -> string "(" ^^ pp_ty ty ^^ string " " ^^ string "&" ^^ string " " ^^ pp_ident ident ^^ string ")"

and pp_encoding x = match x with
| Encoding_Block(ident1,ident2,instr_field0,opcode_value,expr,instr_unpred0,opt_indented_block,ott_menhir_loc) -> string "(" ^^ string "__encoding" ^^ string " " ^^ pp_ident ident1 ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ string "__instruction_set" ^^ string " " ^^ pp_ident ident2 ^^ string " " ^^ string "EOL" ^^ string " " ^^ separate (string " ") (List.map (function (instr_field0) -> pp_instr_field instr_field0) instr_field0) ^^ string " " ^^ string "__opcode" ^^ string " " ^^ pp_opcode_value opcode_value ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "__guard" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "EOL" ^^ string " " ^^ separate (string " ") (List.map (function (instr_unpred0) -> pp_instr_unpred instr_unpred0) instr_unpred0) ^^ string " " ^^ string "__decode" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string " " ^^ string "DEDENT" ^^ string ")"

and pp_opt_conditional x = if x then string "__conditional" else string ""

and pp_opt_postdecode x = match x with Some(ys) -> string "postdecode" ^^ hardline
                                           ^^ (nest 4 (separate (string "\n") (List.map pp_stmt ys)))
                             | None -> string ""

and pp_instr_field x = match x with
| IField_Field(ident,offset1,offset2) -> string "(" ^^ string "__field" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ pp_offset offset1 ^^ string " " ^^ string "+:" ^^ string " " ^^ pp_offset offset2 ^^ string " " ^^ string "EOL" ^^ string ")"

and pp_offset x = string "??"

and pp_opcode_value x = match x with
| Opcode_Bits(bitsLit) -> string bitsLit
| Opcode_Mask(maskLit) -> string maskLit

and pp_instr_unpred x = string "??"

and pp_decode_case x = match x with
| DecoderCase_Case(decode_slice0,decode_alt0,ott_menhir_loc) -> string "(" ^^ string "case" ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (decode_slice0) -> pp_decode_slice decode_slice0) decode_slice0) ^^ string " " ^^ string ")" ^^ string " " ^^ string "of" ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ separate (string " ") (List.map (function (decode_alt0) -> pp_decode_alt decode_alt0) decode_alt0) ^^ string " " ^^ string "DEDENT" ^^ string ")"

and pp_decode_slice x = match x with
| DecoderSlice_Slice(offset1,offset2) -> string "(" ^^ pp_offset offset1 ^^ string " " ^^ string "+:" ^^ string " " ^^ pp_offset offset2 ^^ string ")"
| DecoderSlice_FieldName(ident) -> pp_ident ident
| DecoderSlice_Concat(ident0) -> separate (string ":") (List.map (function (ident0) -> pp_ident ident0) ident0)

and pp_decode_alt x = match x with
| DecoderAlt_Alt(decode_pattern0,decode_body) -> string "(" ^^ string "when" ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (decode_pattern0) -> pp_decode_pattern decode_pattern0) decode_pattern0) ^^ string " " ^^ string ")" ^^ string " " ^^ string "=>" ^^ string " " ^^ pp_decode_body decode_body ^^ string ")"

and pp_decode_pattern x = match x with
| DecoderPattern_Bits(bitsLit) -> string bitsLit
| DecoderPattern_Mask(maskLit) -> string maskLit
| DecoderPattern_Wildcard(ident) -> pp_ident ident
| DecoderPattern_Not(decode_pattern) -> string "(" ^^ string "!" ^^ string " " ^^ pp_decode_pattern decode_pattern ^^ string ")"

and pp_decode_body x = match x with
| DecoderBody_UNPRED(ott_menhir_loc) -> string "(" ^^ string "__UNPREDICTABLE" ^^ string " " ^^ string "EOL" ^^ string ")"
| DecoderBody_UNALLOC(ott_menhir_loc) -> string "(" ^^ string "__UNALLOCATED" ^^ string " " ^^ string "EOL" ^^ string ")"
| DecoderBody_NOP(ott_menhir_loc) -> string "(" ^^ string "__NOP" ^^ string " " ^^ string "EOL" ^^ string ")"
| DecoderBody_Encoding(ident,ott_menhir_loc) -> string "(" ^^ string "__encoding" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "EOL" ^^ string ")"
| DecoderBody_Decoder(instr_field0,decode_case,ott_menhir_loc) -> string "(" ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ separate (string " ") (List.map (function (instr_field0) -> pp_instr_field instr_field0) instr_field0) ^^ string " " ^^ pp_decode_case decode_case ^^ string " " ^^ string "DEDENT" ^^ string ")"

and pp_operator x = string x

and pp_optmapcond x = match x with Some(y) -> pp_expr y | None -> string ""

and pp_mapfield x = match x with
| MapField_Field(ident,pattern) -> string "(" ^^ pp_ident ident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_pattern pattern ^^ string ")"

and pp_qualident x = pp_ident     x

and pp_ty x = match x with
| Type_Constructor(tident) -> pp_qualident tident
| Type_Bits(expr) -> string "(" ^^ string "bits" ^^ string " " ^^ string "(" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ")" ^^ string ")"
| Type_App(tident,expr0) -> string "(" ^^ pp_qualident tident ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string ")" ^^ string ")"
| Type_OfExpr(expr) -> string "(" ^^ string "typeof" ^^ string " " ^^ string "(" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ")" ^^ string ")"
| Type_Register(intLit,regfields) -> string "(" ^^ string "__register" ^^ string " " ^^ string intLit ^^ string " " ^^ string "{" ^^ string " " ^^ pp_regfields regfields ^^ string " " ^^ string "}" ^^ string ")"
| Type_Array(ixtype,ty) -> string "(" ^^ string "array" ^^ string " " ^^ string "[" ^^ string " " ^^ pp_ixtype ixtype ^^ string " " ^^ string "]" ^^ string " " ^^ string "of" ^^ string " " ^^ pp_ty ty ^^ string ")"
| Type_Tuple(ty0) -> string "(" ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (ty0) -> pp_ty ty0) ty0) ^^ string " " ^^ string ")" ^^ string ")"

and pp_regfields rfs = separate (string ",\n") (List.map pp_regfield     rfs)

and pp_regfield rf = separate (string "\n") (List.map pp_slice (fst rf)) ^^ string " " ^^ pp_ident (snd rf)

and pp_stmt x = match x with
| Stmt_VarDeclsNoInit(ty,ident0,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_VarDecl(ty,ident,expr,ott_menhir_loc) -> string "(" ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_ConstDecl(ty,ident,expr,ott_menhir_loc) -> string "(" ^^ string "constant" ^^ string " " ^^ pp_ty ty ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Assign(lexpr,expr,ott_menhir_loc) -> string "(" ^^ pp_lexpr lexpr ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_FunReturn(expr,ott_menhir_loc) -> string "(" ^^ string "return" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_ProcReturn(ott_menhir_loc) -> string "(" ^^ string "return" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Assert(expr,ott_menhir_loc) -> string "(" ^^ string "assert" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Unpred(ott_menhir_loc) -> string "(" ^^ string "UNPREDICTABLE" ^^ string " " ^^ string "(" ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_ConstrainedUnpred(ott_menhir_loc) -> string "(" ^^ string "CONSTRAINED_UNPREDICTABLE" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_ImpDef(ident,ott_menhir_loc) -> string "(" ^^ string "IMPLEMENTATION_DEFINED" ^^ string " " ^^ string "(" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Undefined(ott_menhir_loc) -> string "(" ^^ string "UNDEFINED" ^^ string " " ^^ string "(" ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_ExceptionTaken(ott_menhir_loc) -> string "(" ^^ string "__ExceptionTaken" ^^ string " " ^^ string "(" ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Dep_Unpred(ott_menhir_loc) -> string "(" ^^ string "UNPREDICTABLE" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Dep_ImpDef(stringLit,ott_menhir_loc) -> string "(" ^^ string "IMPLEMENTATION_DEFINED" ^^ string " " ^^ string stringLit ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Dep_Undefined(ott_menhir_loc) -> string "(" ^^ string "UNDEFINED" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_See(expr,ott_menhir_loc) -> string "(" ^^ string "SEE" ^^ string " " ^^ string "(" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_Throw(ident,ott_menhir_loc) -> string "(" ^^ string "throw" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_DecodeExecute(ident,expr,ott_menhir_loc) -> string "(" ^^ string "__decode" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_TCall(qualident,expr0_prime,expr0,ott_menhir_loc) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "{{" ^^ string " " ^^ separate (string ",") (List.map (function (expr0_prime) -> pp_expr expr0_prime) expr0_prime) ^^ string " " ^^ string "}}" ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string ")" ^^ string " " ^^ string ";" ^^ string ")"
| Stmt_If(expr,opt_indented_block,s_elsif0,optional_else,ott_menhir_loc) -> string "(" ^^ string "if" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "then" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string " " ^^ separate (string " ") (List.map (function (s_elsif0) -> pp_s_elsif s_elsif0) s_elsif0) ^^ string " " ^^ pp_optional_else optional_else ^^ string ")"
| Stmt_Case(expr,alt0,opt_otherwise,ott_menhir_loc) -> string "(" ^^ string "case" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "of" ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ separate (string " ") (List.map (function (alt0) -> pp_alt alt0) alt0) ^^ string " " ^^ pp_opt_otherwise opt_otherwise ^^ string " " ^^ string "DEDENT" ^^ string ")"
| Stmt_For(ident,expr1,direction,expr2,indented_block,ott_menhir_loc) -> string "(" ^^ string "for" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr1 ^^ string " " ^^ pp_direction direction ^^ string " " ^^ pp_expr expr2 ^^ string " " ^^ pp_indented_block indented_block ^^ string ")"
| Stmt_While(expr,indented_block,ott_menhir_loc) -> string "(" ^^ string "while" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "do" ^^ string " " ^^ pp_indented_block indented_block ^^ string ")"
| Stmt_Repeat(indented_block,expr,ott_menhir_loc) -> string "(" ^^ string "repeat" ^^ string " " ^^ pp_indented_block indented_block ^^ string " " ^^ string "until" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ";" ^^ string " " ^^ string "EOL" ^^ string ")"
| Stmt_Try(indented_block,ident,catcher0,opt_otherwise,ott_menhir_loc) -> string "(" ^^ string "try" ^^ string " " ^^ pp_indented_block indented_block ^^ string " " ^^ string "catch" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "EOL" ^^ string " " ^^ string "INDENT" ^^ string " " ^^ separate (string " ") (List.map (function (catcher0) -> pp_catcher catcher0) catcher0) ^^ string " " ^^ pp_opt_otherwise opt_otherwise ^^ string " " ^^ string "DEDENT" ^^ string ")"

and pp_indented_block x = (nest 4 (lbrace
                              ^^ hardline
                              ^^ if (match x with [] -> true | _ -> false) then
                                    string "pass;"
                                 else
                                    (separate hardline (List.map pp_stmt x))
                  ))
                  ^^ hardline
                  ^^ rbrace

and pp_lexpr x = match x with
| LExpr_Wildcard -> string "-"
| LExpr_Var(qualident) -> pp_qualident qualident
| LExpr_Field(lexpr,ident) -> string "(" ^^ pp_lexpr lexpr ^^ string " " ^^ string "." ^^ string " " ^^ pp_ident ident ^^ string ")"
| LExpr_Fields(lexpr,ident0) -> string "(" ^^ pp_lexpr lexpr ^^ string " " ^^ string "." ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string "]" ^^ string ")"
| LExpr_Slices(lexpr,slice0) -> string "(" ^^ pp_lexpr lexpr ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (slice0) -> pp_slice slice0) slice0) ^^ string " " ^^ string "]" ^^ string ")"
| LExpr_BitTuple(lexpr0) -> string "(" ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (lexpr0) -> pp_lexpr lexpr0) lexpr0) ^^ string " " ^^ string "]" ^^ string ")"
| LExpr_Tuple(lexpr0) -> string "(" ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (lexpr0) -> pp_lexpr lexpr0) lexpr0) ^^ string " " ^^ string ")" ^^ string ")"
| LExpr_Array(lexpr,expr) -> string "(" ^^ string "__array" ^^ string " " ^^ pp_lexpr lexpr ^^ string " " ^^ string "[" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "]" ^^ string ")"
| LExpr_Write(ident,expr0_prime,expr0) -> string "(" ^^ string "__write" ^^ string " " ^^ pp_ident ident ^^ string " " ^^ string "{{" ^^ string " " ^^ separate (string ",") (List.map (function (expr0_prime) -> pp_expr expr0_prime) expr0_prime) ^^ string " " ^^ string "}}" ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string "]" ^^ string ")"
| LExpr_ReadWrite(ident1,ident2,expr0_prime,expr0) -> string "(" ^^ string "__readwrite" ^^ string " " ^^ pp_ident ident1 ^^ string " " ^^ pp_ident ident2 ^^ string " " ^^ string "{{" ^^ string " " ^^ separate (string ",") (List.map (function (expr0_prime) -> pp_expr expr0_prime) expr0_prime) ^^ string " " ^^ string "}}" ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string "]" ^^ string ")"

and pp_s_elsif x = match x with
| S_Elsif_Cond(expr,opt_indented_block) -> string "(" ^^ string "elsif" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string "then" ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"

and pp_optional_else x = match x with [] -> string ""
                             | ys -> string "else" ^^ hardline
                                         ^^ (nest 4 (separate (string "\n") (List.map pp_stmt ys)))

and pp_alt x = match x with
| Alt_Alt(pattern0,opt_altcond,possibly_empty_block) -> string "(" ^^ string "when" ^^ string " " ^^ separate (string ",") (List.map (function (pattern0) -> pp_pattern pattern0) pattern0) ^^ string " " ^^ pp_opt_altcond opt_altcond ^^ string " " ^^ pp_indented_block possibly_empty_block ^^ string ")"

and pp_opt_otherwise x = match x with Some(ys) -> string "otherwise" ^^ hardline
                                           ^^ (nest 4 (separate (string "\n") (List.map pp_stmt ys)))
                             | None -> string ""

and pp_opt_altcond x = match x with Some(y) -> pp_expr y | None -> string ""

and pp_pattern x = match x with
| Pat_LitInt(intLit) -> string intLit
| Pat_LitHex(hexLit) -> string hexLit
| Pat_LitBits(bitsLit) -> string bitsLit
| Pat_LitMask(maskLit) -> string maskLit
| Pat_Const(qualident) -> pp_qualident qualident
| Pat_Wildcard -> string "-"
| Pat_Tuple(pattern0) -> string "(" ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (pattern0) -> pp_pattern pattern0) pattern0) ^^ string " " ^^ string ")" ^^ string ")"
| Pat_Set(apattern0) -> string "(" ^^ string "{" ^^ string " " ^^ separate (string ",") (List.map (function (apattern0) -> pp_pattern apattern0) apattern0) ^^ string " " ^^ string "}" ^^ string ")"
| Pat_Range(expr1,expr2) -> string "(" ^^ pp_expr expr1 ^^ string " " ^^ string ".." ^^ string " " ^^ pp_expr expr2 ^^ string ")"
| Pat_Single(expr) -> pp_expr expr

and pp_direction x = match x with
| Direction_Up -> string "to"
| Direction_Down -> string "downto"

and pp_catcher x = match x with
| Catcher_Guarded(expr,opt_indented_block) -> string "(" ^^ string "when" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ pp_indented_block opt_indented_block ^^ string ")"

and pp_expr x = match x with
| Expr_If(cexpr1,expr1,e_elsif0,expr2) -> string "(" ^^ string "if" ^^ string " " ^^ pp_expr cexpr1 ^^ string " " ^^ string "then" ^^ string " " ^^ pp_expr expr1 ^^ string " " ^^ separate (string " ") (List.map (function (e_elsif0) -> pp_e_elsif e_elsif0) e_elsif0) ^^ string " " ^^ string "else" ^^ string " " ^^ pp_expr expr2 ^^ string ")"
| Expr_Binop(expr1,binop,expr2) -> string "(" ^^ pp_expr expr1 ^^ string " " ^^ pp_binop binop ^^ string " " ^^ pp_expr expr2 ^^ string ")"
| Expr_Unop(unop,fexpr) -> string "(" ^^ pp_unop unop ^^ string " " ^^ pp_expr fexpr ^^ string ")"
| Expr_Field(fexpr,ident) -> string "(" ^^ pp_expr fexpr ^^ string " " ^^ string "." ^^ string " " ^^ pp_ident ident ^^ string ")"
| Expr_Fields(fexpr,ident0) -> string "(" ^^ pp_expr fexpr ^^ string " " ^^ string "." ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (ident0) -> pp_ident ident0) ident0) ^^ string " " ^^ string "]" ^^ string ")"
| Expr_Slices(fexpr,slice0) -> string "(" ^^ pp_expr fexpr ^^ string " " ^^ string "[" ^^ string " " ^^ separate (string ",") (List.map (function (slice0) -> pp_slice slice0) slice0) ^^ string " " ^^ string "]" ^^ string ")"
| Expr_In(fexpr,pattern) -> string "(" ^^ pp_expr fexpr ^^ string " " ^^ string "IN" ^^ string " " ^^ pp_pattern pattern ^^ string ")"
| Expr_Var(qualident) -> pp_qualident qualident
| Expr_Parens(expr) -> string "(" ^^ string "(" ^^ string " " ^^ pp_expr expr ^^ string " " ^^ string ")" ^^ string ")"
| Expr_Tuple(expr0) -> string "(" ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string ")" ^^ string ")"
| Expr_Unknown(ty) -> string "(" ^^ pp_ty ty ^^ string " " ^^ string "UNKNOWN" ^^ string ")"
| Expr_ImpDef(ty,opt_stringLit) -> string "(" ^^ pp_ty ty ^^ string " " ^^ string "IMPLEMENTATION_DEFINED" ^^ string " " ^^ pp_opt_stringLit opt_stringLit ^^ string ")"
| Expr_TApply(qualident,expr0_prime,expr0) -> string "(" ^^ pp_qualident qualident ^^ string " " ^^ string "{{" ^^ string " " ^^ separate (string ",") (List.map (function (expr0_prime) -> pp_expr expr0_prime) expr0_prime) ^^ string " " ^^ string "}}" ^^ string " " ^^ string "(" ^^ string " " ^^ separate (string ",") (List.map (function (expr0) -> pp_expr expr0) expr0) ^^ string " " ^^ string ")" ^^ string ")"
| Expr_Array(expr1,expr2) -> string "(" ^^ string "__array" ^^ string " " ^^ pp_expr expr1 ^^ string " " ^^ string "[" ^^ string " " ^^ pp_expr expr2 ^^ string " " ^^ string "]" ^^ string ")"
| Expr_LitInt(intLit) -> string intLit
| Expr_LitHex(hexLit) -> string hexLit
| Expr_LitReal(realLit) -> string realLit
| Expr_LitBits(bitsLit) -> string bitsLit
| Expr_LitMask(maskLit) -> string maskLit
| Expr_LitString(stringLit) -> string stringLit

and pp_e_elsif x = match x with
| E_Elsif_Cond(expr1,expr2) -> string "(" ^^ string "elsif" ^^ string " " ^^ pp_expr expr1 ^^ string " " ^^ string "then" ^^ string " " ^^ pp_expr expr2 ^^ string ")"

and pp_factor x = match x with
| Factor_BinOp(binop_or_concat,bexpr) -> string "(" ^^ pp_binop binop_or_concat ^^ string " " ^^ pp_expr bexpr ^^ string ")"

and pp_binop x = match x with
| Binop_Eq -> string "=="
| Binop_NtEq -> string "!="
| Binop_Gt -> string ">"
| Binop_GtEq -> string ">="
| Binop_Lt -> string "<"
| Binop_LtEq -> string "<="
| Binop_Plus -> string "+"
| Binop_Minus -> string "-"
| Binop_Multiply -> string "*"
| Binop_Divide -> string "/"
| Binop_Power -> string "^"
| Binop_Quot -> string "QUOT"
| Binop_Rem -> string "REM"
| Binop_Div -> string "DIV"
| Binop_Mod -> string "MOD"
| Binop_ShiftL -> string "<<"
| Binop_ShiftR -> string ">>"
| Binop_BoolAnd -> string "&&"
| Binop_BoolOr -> string "||"
| Binop_BoolIff -> string "IFF"
| Binop_BoolImplies -> string "IMPLIES"
| Binop_BitOr -> string "OR"
| Binop_BitEor -> string "EOR"
| Binop_BitAnd -> string "AND"
| Binop_Append -> string "++"
| Binop_Concat -> string ":"
| Binop_DUMMY -> string ""

and pp_opt_stringLit x = match x with Some(y) -> string y | None -> string ""

and pp_unop x = match x with
| Unop_Negate -> string "-"
| Unop_BoolNot -> string "!"
| Unop_BitsNot -> string "NOT"

and pp_slice x = match x with
| Slice_Single(sexpr) -> pp_expr sexpr
| Slice_HiLo(sexpr1,sexpr2) -> string "(" ^^ pp_expr sexpr1 ^^ string " " ^^ string ":" ^^ string " " ^^ pp_expr sexpr2 ^^ string ")"
| Slice_LoWd(sexpr1,sexpr2) -> string "(" ^^ pp_expr sexpr1 ^^ string " " ^^ string "+:" ^^ string " " ^^ pp_expr sexpr2 ^^ string ")"

and pp_expr_command x = pp_expr     x

and pp_stmt_command x = pp_stmt     x

and pp_impdef_command x = match x with
| CLI_Impdef(stringLit,expr) -> string "(" ^^ string "EOL" ^^ string " " ^^ string stringLit ^^ string " " ^^ string "=" ^^ string " " ^^ pp_expr expr ^^ string ")"

OCaml

Innovation. Community. Security.