Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – tendra.SVN – Blame – /branches/tendra4/src/utilities/sid/parser.sid – Rev 2

Subversion Repositories tendra.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
2
    		 Crown Copyright (c) 1997
3
 
4
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
6
    acting through the Defence Evaluation and Research Agency
7
    (DERA).  It is made available to Recipients with a
8
    royalty-free licence for its use, reproduction, transfer
9
    to other parties and amendment for any purpose not excluding
10
    product development provided that any such use et cetera
11
    shall be deemed to be acceptance of the following conditions:-
12
 
13
        (1) Its Recipients shall ensure that this Notice is
14
        reproduced upon any copies or amended versions of it;
15
 
16
        (2) Any amended version of it shall be clearly marked to
17
        show both the nature of and the organisation responsible
18
        for the relevant amendment or amendments;
19
 
20
        (3) Its onward transfer from a recipient to another
21
        party shall be deemed to be that party's acceptance of
22
        these conditions;
23
 
24
        (4) DERA gives no warranty or assurance as to its
25
        quality or suitability for any purpose and DERA accepts
26
        no liability whatsoever in relation to any use to which
27
        it may be put.
28
*/
29
 
30
 
31
%types%
32
 
33
AltP;
34
BoolT;
35
EntryP;
36
ItemP;
37
RuleP;
38
StringT;
39
 
40
%terminals%
41
 
42
blt-types;		// %types%
43
blt-terminals;		// %maxterminal%
44
blt-productions;	// %productions% 
45
blt-entry;		// %entry%
46
identifier: () -> (: StringT);
47
typemark;		// :
48
open-tuple;		// (
49
close-tuple;		// )
50
arrow;			// ->
51
terminator;		// ;
52
begin-action;		// <
53
end-action;		// >
54
define;			// =
55
begin-rule;		// {
56
end-rule;		// }
57
alt-sep;		// ||
58
handler-sep;		// ##
59
empty;			// $
60
pred-result;		// ?
61
ignore;			// !
62
scopemark;		// ::
63
begin-scope;		// [
64
end-scope;		// ]
65
separator;		// ,
66
reference;		// &
67
eof;
68
 
69
%productions%
70
 
71
<init-tuple>;
72
<tuple-name>: (: StringT &, : StringT &) -> ();
73
<tuple-ref-name>: (: StringT &, : StringT &) -> ();
74
<tuple-type>: (: StringT &) -> ();
75
<tuple-ref-type>: (: StringT &) -> ();
76
<save-tuple>;
77
<null-type>;
78
<add-type>: (: StringT &) -> ();
79
<terminal>: (: StringT &) -> ();
80
<i-terminal>: (: StringT &) -> ();
81
<x-terminal>;
82
<add-name>: (: StringT &) -> ();
83
<add-ref-name>: (: StringT &) -> ();
84
<add-var>: (: StringT &) -> ();
85
<add-pred>;
86
<add-void>;
87
<action>: (: StringT &) -> ();
88
<x-action>;
89
<non-local>: (: StringT &, : StringT &) -> ();
90
<non-local-init>: (: StringT &) -> ();
91
<save-scope>: () -> (: EntryP, : RuleP);
92
<restore-scope>: (: EntryP, : RuleP) -> ();
93
<prod-action>: (: StringT &) -> ();
94
<x-prod-action>;
95
<x-identity>;
96
<x-prod-rule>: (: StringT &) -> ();
97
<x-prod-rule-or-identity>: (: StringT &) -> ();
98
<save>: () -> (: EntryP, : RuleP, : AltP, : BoolT, : ItemP);
99
<restore>: (: EntryP, : RuleP, : AltP, :BoolT, : ItemP) -> ();
100
<handler>;
101
<x-handler>;
102
<empty-alt>;
103
<non-empty-alt>;
104
<x-non-empty-alt>;
105
<rule>: (: StringT &) -> ();
106
<x-rule>;
107
<prod>;
108
<x-prod>;
109
<push-scope>;
110
<pop-scope>;
111
<use-global>;
112
<use-local>;
113
<add-entry>: (: StringT &) -> ();
114
<init>;
115
<x-terminals>;
116
 
117
<unhandled-syntax-error>;
118
 
119
<expected-typemark>;
120
<expected-identifier>;
121
<expected-tuple-defn>;
122
<expected-terminal-decn>;
123
<expected-separator>;
124
<expected-open-tuple>;
125
<expected-close-tuple>;
126
<expected-arrow>;
127
<expected-terminator>;
128
<expected-lhs-name>;
129
<expected-rhs-name>;
130
<expected-begin-action>;
131
<expected-end-action>;
132
<expected-end-scope>;
133
<expected-tuple-or-terminator>;
134
<expected-item-rhs>;
135
<expected-define>;
136
<expected-tuple-or-define-or-terminator>;
137
<expected-begin-rule>;
138
<expected-end-rule>;
139
<expected-item>;
140
<expected-alternative>;
141
<expected-other-defn>;
142
<expected-production-defn>;
143
<expected-blt-types>;
144
<expected-blt-terminals>;
145
<expected-blt-productions>;
146
<expected-blt-entry>;
147
<expected-eof>;
148
<expected-terminator-or-define>;
149
 
150
<destroy-string>: (: StringT &) -> ();
151
 
152
<skip-to-end-of-tuple-defn>;
153
<skip-to-end-of-terminal-decn>;
154
<skip-to-end-of-lhs-name>;
155
<skip-to-end-of-rhs-name>;
156
<skip-to-end-of-action-decn>;
157
<skip-to-end-of-item>;
158
<skip-to-end-of-alternative>;
159
<skip-to-end-of-other-defn>;
160
<skip-to-end-of-production-defn>;
161
<skip-to-end-of-entry-list>;
162
<skip-recover>;
163
 
164
<is-blt-entry-or-end-scope-or-eof>: () -> (: BoolT);
165
<is-close-tuple-or-skipped-or-eof>: () -> (: BoolT);
166
<is-terminator>: () -> (: BoolT);
167
<is-not-separator>: () -> (: BoolT);
168
 
169
/*
170
-------------------------------------------------------------------------------
171
| Before calling the "sid-parse-grammar" function, the following variables
172
| should have been initialized: "sid_current_stream" and "sid_current_grammar".
173
-------------------------------------------------------------------------------
174
*/
175
 
176
sid-parse-grammar [
177
    // FUNCTION TYPE SPECIFICATIONS:
178
    function-type-defn [
179
	tuple-defn = {
180
	    name = identifier;
181
	    {
182
		typemark;
183
	      ##
184
		<expected-typemark>;
185
	    };
186
	    {
187
		type = identifier;
188
		{
189
		    reference;
190
		    <tuple-ref-name> (&name, &type);
191
		  ||
192
		    <tuple-name> (&name, &type);
193
		};
194
	      ##
195
		<expected-identifier>;
196
		<destroy-string> (&name);
197
		<skip-to-end-of-tuple-defn>;
198
	    };
199
	  ||
200
	    typemark;
201
	    {
202
		type = identifier;
203
		{
204
		    reference;
205
		    <tuple-ref-type> (&type);
206
		  ||
207
		    <tuple-type> (&type);
208
		};
209
	      ##
210
		<expected-identifier>;
211
		<skip-to-end-of-tuple-defn>;
212
	    };
213
	  ##
214
	    <expected-tuple-defn>;
215
	    <skip-to-end-of-tuple-defn>;
216
	};
217
 
218
	tuple-defn-list-1 = {
219
	    tuple-defn;
220
	    {
221
		? = <is-close-tuple-or-skipped-or-eof>;
222
	      ||
223
		separator;
224
		tuple-defn-list-1;
225
	      ##
226
		<expected-separator>;
227
		tuple-defn-list-1;
228
	    };
229
	};
230
 
231
	tuple-defn-list = {
232
	    $;
233
	  ||
234
	    tuple-defn-list-1;
235
	};
236
 
237
	type-tuple-defn = {
238
	    <init-tuple>;
239
	    {
240
		open-tuple;
241
	      ##
242
		<expected-open-tuple>;
243
	    };
244
	    tuple-defn-list;
245
	    <skip-recover>;
246
	    {
247
		close-tuple;
248
	      ##
249
		<expected-close-tuple>;
250
	    };
251
	};
252
    ] = {
253
	typemark;
254
	type-tuple-defn;
255
	<save-tuple>;
256
	{
257
	    arrow;
258
	  ##
259
	    <expected-arrow>;
260
	};
261
	type-tuple-defn;
262
      ||
263
	<null-type>;
264
    };
265
 
266
    // TYPE DECLARATIONS:
267
    type-decl-list [
268
	type-decl = {
269
	    id = identifier;
270
	    <add-type> (&id);
271
	    {
272
		terminator;
273
	      ##
274
		<expected-terminator>;
275
	    };
276
	};
277
    ] = {
278
	$;
279
      ||
280
	type-decl;
281
	type-decl-list;
282
    };
283
 
284
    // TERMINAL DECLARATIONS:
285
    terminal-decn-list [
286
	terminal-decn = {
287
	    id = identifier;
288
	    <terminal> (&id);
289
	    function-type-defn;
290
	    <x-terminal>;
291
	    {
292
		terminator;
293
	      ##
294
		<expected-terminator>;
295
	    };
296
	  ||
297
	    ignore;
298
	    {
299
		id = identifier;
300
		<i-terminal> (&id);
301
		function-type-defn;
302
		<x-terminal>;
303
		{
304
		    terminator;
305
		  ##
306
		    <expected-terminator>;
307
		};
308
	      ##
309
		<expected-identifier>;
310
		<skip-to-end-of-terminal-decn>;
311
	    };
312
	  ##
313
	    <expected-terminal-decn>;
314
	    <skip-to-end-of-terminal-decn>;
315
	};
316
    ] = {
317
	terminal-decn;
318
	<skip-recover>;
319
	{
320
	    $;
321
	  ||
322
	    terminal-decn-list;
323
	};
324
    };
325
 
326
    // PRODUCTION DEFINITIONS:
327
    production-defn-list [
328
	// LHS TUPLES:
329
	lhs-name-tuple [
330
	    lhs-name = {
331
		id = identifier;
332
		<add-name> (&id);
333
	      ||
334
		reference;
335
		{
336
		    id = identifier;
337
		    <add-var> (&id);
338
		  ##
339
		    <expected-identifier>;
340
		};
341
	      ||
342
		pred-result;
343
		<add-pred>;
344
	      ||
345
		ignore;
346
		<add-void>;
347
	      ##
348
		<expected-lhs-name>;
349
		<skip-to-end-of-lhs-name>;
350
	    };
351
 
352
	    lhs-name-list-1 = {
353
		lhs-name;
354
		{
355
		    ? = <is-close-tuple-or-skipped-or-eof>;
356
		  ||
357
		    separator;
358
		    lhs-name-list-1;
359
		  ##
360
		    <expected-separator>;
361
		    lhs-name-list-1;
362
		};
363
	    };
364
 
365
	    lhs-name-list = {
366
		$;
367
	      ||
368
		lhs-name-list-1;
369
	    };
370
	] = {
371
	    <init-tuple>;
372
	    {
373
		open-tuple;
374
	      ##
375
		<expected-open-tuple>;
376
	    };
377
	    lhs-name-list;
378
	    <skip-recover>;
379
	    {
380
		close-tuple;
381
	      ##
382
		<expected-close-tuple>;
383
	    };
384
	};
385
 
386
	// RHS TUPLES:
387
	rhs-name-tuple [
388
	    rhs-name = {
389
		id = identifier;
390
		<add-name> (&id);
391
	      ||
392
		reference;
393
		{
394
		    id = identifier;
395
		    <add-ref-name> (&id);
396
		  ##
397
		    <expected-identifier>;
398
		    <skip-to-end-of-rhs-name>;
399
		};
400
	      ##
401
		<expected-rhs-name>;
402
		<skip-to-end-of-rhs-name>;
403
	    };
404
 
405
	    rhs-name-list-1 = {
406
		rhs-name;
407
		{
408
		    ? = <is-close-tuple-or-skipped-or-eof>;
409
		  ||
410
		    separator;
411
		    rhs-name-list-1;
412
		  ##
413
		    <expected-separator>;
414
		    rhs-name-list-1;
415
		};
416
	    };
417
 
418
	    rhs-name-list = {
419
		$;
420
	      ||
421
		rhs-name-list-1;
422
	    };
423
	] = {
424
	    <init-tuple>;
425
	    {
426
		open-tuple;
427
	      ##
428
		<expected-open-tuple>;
429
	    };
430
	    rhs-name-list;
431
	    <skip-recover>;
432
	    {
433
		close-tuple;
434
	      ##
435
		<expected-close-tuple>;
436
	    };
437
	};
438
 
439
	// ACTION DECLARATIONS:
440
	action-decn = {
441
	    begin-action;
442
	    {
443
		id = identifier;
444
		<action> (&id);
445
		{
446
		    end-action;
447
		  ##
448
		    <expected-end-action>;
449
		};
450
		function-type-defn;
451
		<x-action>;
452
		{
453
		    terminator;
454
		  ##
455
		    <expected-terminator>;
456
		};
457
	      ##
458
		<expected-identifier>;
459
		<skip-to-end-of-action-decn>;
460
	    };
461
	};
462
 
463
	// PRODUCTION DEFINITIONS:
464
	production-locals = {
465
	    $;
466
	  ||
467
	    begin-scope;
468
	    (entry, rule) = <save-scope>;
469
	    production-defn-list;
470
	    <restore-scope> (entry, rule);
471
	    {
472
		end-scope;
473
	      ##
474
		<expected-end-scope>;
475
	    };
476
	};
477
 
478
	production-defn-define-4 = {
479
	    rhs-name-tuple;
480
	    <x-prod-action>;
481
	    {
482
		terminator;
483
	      ##
484
		<expected-terminator>;
485
	    };
486
	  ||
487
	    <init-tuple>;
488
	    <x-prod-action>;
489
	    terminator;
490
	  ##
491
	    <expected-tuple-or-terminator>;
492
	    <skip-to-end-of-item>;
493
	};
494
 
495
	production-defn-define-1 = {
496
	    begin-action;
497
	    {
498
		id = identifier;
499
		<prod-action> (&id);
500
		{
501
		    end-action;
502
		  ##
503
		    <expected-end-action>;
504
		};
505
		production-defn-define-4;
506
	      ##
507
		<expected-identifier>;
508
		<skip-to-end-of-item>;
509
	    };
510
	  ||
511
	    id = identifier;
512
	    {
513
		<init-tuple>;
514
		<x-prod-rule-or-identity> (&id);
515
		terminator;
516
	      ||
517
		rhs-name-tuple;
518
		<x-prod-rule> (&id);
519
		{
520
		    terminator;
521
		  ##
522
		    <expected-terminator>;
523
		};
524
	      ##
525
		<expected-tuple-or-terminator>;
526
		<destroy-string> (&id);
527
		<skip-to-end-of-item>;
528
	    };
529
	  ||
530
	    <init-tuple>;
531
	    reference;
532
	    {
533
		id = identifier;
534
		<add-ref-name> (&id);
535
		<x-identity>;
536
	      ##
537
		<expected-identifier>;
538
		<skip-to-end-of-item>;
539
	    };
540
	  ||
541
	    rhs-name-tuple;
542
	    <x-identity>;
543
	    {
544
		terminator;
545
	      ##
546
		<expected-terminator>;
547
	    };
548
	  ##
549
	    <expected-item-rhs>;
550
	    <skip-to-end-of-item>;
551
	};
552
 
553
	production-defn-define = {
554
	    lhs-name-tuple;
555
	    <save-tuple>;
556
	    {
557
		define;
558
	      ##
559
		<expected-define>;
560
	    };
561
	    production-defn-define-1;
562
	  ||
563
	    <init-tuple>;
564
	    <add-pred>;
565
	    pred-result;
566
	    <save-tuple>;
567
	    {
568
		define;
569
	      ##
570
		<expected-define>;
571
	    };
572
	    production-defn-define-1;
573
	  ||
574
	    <init-tuple>;
575
	    <add-void>;
576
	    ignore;
577
	    <save-tuple>;
578
	    {
579
		define;
580
	      ##
581
		<expected-define>;
582
	    };
583
	    production-defn-define-1;
584
	  ||
585
	    reference;
586
	    {
587
		id = identifier;
588
		<init-tuple>;
589
		<add-var> (&id);
590
		<save-tuple>;
591
		{
592
		    define;
593
		  ##
594
		    <expected-define>;
595
		};
596
		production-defn-define-1;
597
	      ##
598
		<expected-identifier>;
599
	    };
600
	  ||
601
	    id = identifier;
602
	    {
603
		<init-tuple>;
604
		<save-tuple>;
605
		rhs-name-tuple;
606
		<x-prod-rule> (&id);
607
		{
608
		    terminator;
609
		  ##
610
		    <expected-terminator>;
611
		};
612
	      ||
613
		<init-tuple>;
614
		<add-name> (&id);
615
		<save-tuple>;
616
		define;
617
		production-defn-define-1;
618
	      ||
619
		<init-tuple>;
620
		<save-tuple>;
621
		<init-tuple>;
622
		<x-prod-rule> (&id);
623
		terminator;
624
	      ##
625
		<expected-tuple-or-define-or-terminator>;
626
		<destroy-string> (&id);
627
		<skip-to-end-of-item>;
628
	    };
629
	  ||
630
	    <init-tuple>;
631
	    <save-tuple>;
632
	    begin-action;
633
	    {
634
		id = identifier;
635
		<prod-action> (&id);
636
		{
637
		    end-action;
638
		  ##
639
		    <expected-end-action>;
640
		};
641
		production-defn-define-4;
642
	      ##
643
		<expected-identifier>;
644
		<skip-to-end-of-item>;
645
	    };
646
	};
647
 
648
	production-defn-rhs;
649
 
650
	production-defn-item = {
651
	    production-defn-define;
652
	    <skip-recover>;
653
	  ||
654
	    begin-rule;
655
	    (entry, rule, alt, internal, item) = <save>;
656
	    production-defn-rhs;
657
	    <restore> (entry, rule, alt, internal, item);
658
	    {
659
		end-rule;
660
	      ##
661
		<expected-end-rule>;
662
	    };
663
	    {
664
		terminator;
665
	      ##
666
		<expected-terminator>;
667
	    };
668
	};
669
 
670
	production-defn-non-empty-alternative = {
671
	    production-defn-item;
672
	  ||
673
	    production-defn-item;
674
	    production-defn-non-empty-alternative;
675
	  ##
676
	    <expected-item>;
677
	    <skip-to-end-of-item>;
678
	    <skip-recover>;
679
	};
680
 
681
	exception-handler = {
682
	    <handler>;
683
	    production-defn-non-empty-alternative;
684
	    <x-handler>;
685
	};
686
 
687
	production-defn-alternative = {
688
	    <empty-alt>;
689
	    empty;
690
	    {
691
		terminator;
692
	      ##
693
		<expected-terminator>;
694
	    };
695
	  ||
696
	    <non-empty-alt>;
697
	    production-defn-non-empty-alternative;
698
	    <x-non-empty-alt>;
699
	  ##
700
	    <expected-alternative>;
701
	    <skip-to-end-of-alternative>;
702
	    <skip-recover>;
703
	};
704
 
705
	production-defn-alternatives = {
706
	    production-defn-alternative;
707
	    {
708
		$;
709
	      ||
710
		alt-sep;
711
		production-defn-alternatives;
712
	    };
713
	};
714
 
715
	production-defn-rhs = {
716
	    production-defn-alternatives;
717
	    {
718
		$;
719
	      ||
720
		handler-sep;
721
		exception-handler;
722
	    };
723
	};
724
 
725
	other-defn = {
726
	    id = identifier;
727
	    {
728
		typemark;
729
		{
730
		    type = identifier;
731
		    <non-local> (&id, &type);
732
		    {
733
			terminator;
734
		      ||
735
			define;
736
			{
737
			    begin-action;
738
			  ##
739
			    <expected-begin-action>;
740
			};
741
			{
742
			    action = identifier;
743
			    <non-local-init> (&action);
744
			    {
745
				end-action;
746
			      ##
747
				<expected-end-action>;
748
			    };
749
			    {
750
				terminator;
751
			      ##
752
				<expected-terminator>;
753
			    };
754
			  ##
755
			    <expected-identifier>;
756
			};
757
		      ##
758
			<expected-terminator-or-define>;
759
		    };
760
		  ##
761
		    <expected-identifier>;
762
		    <destroy-string> (&id);
763
		    <skip-to-end-of-other-defn>;
764
		};
765
	      ||
766
		function-type-defn;
767
		<rule> (&id);
768
		{
769
		    <x-rule>;
770
		    terminator;
771
		  ||
772
		    <prod>;
773
		    <push-scope>;
774
		    production-locals;
775
		    {
776
			define;
777
		      ##
778
			<expected-define>;
779
		    };
780
		    {
781
			begin-rule;
782
		      ##
783
			<expected-begin-rule>;
784
		    };
785
		    production-defn-rhs;
786
		    {
787
			end-rule;
788
		      ##
789
			<expected-end-rule>;
790
		    };
791
		    <pop-scope>;
792
		    <x-prod>;
793
		    {
794
			terminator;
795
		      ##
796
			<expected-terminator>;
797
		    };
798
		};
799
	      ##
800
		<expected-other-defn>;
801
		<destroy-string> (&id);
802
		<skip-to-end-of-other-defn>;
803
	    };
804
	};
805
 
806
	production-defn = {
807
	    {
808
		scopemark;
809
		<use-global>;
810
	       ||
811
		<use-local>;
812
	    };
813
	    {
814
		action-decn;
815
	      ||
816
		other-defn;
817
	    };
818
	};
819
    ] /* production-defn-list */ = {
820
	production-defn;
821
	<skip-recover>;
822
	{
823
	    ? = <is-blt-entry-or-end-scope-or-eof>;
824
	  ||
825
	    production-defn-list;
826
	};
827
      ##
828
	<expected-production-defn>;
829
	<skip-to-end-of-production-defn>;
830
	<skip-recover>;
831
	{
832
	    ? = <is-blt-entry-or-end-scope-or-eof>;
833
	  ##
834
	    production-defn-list;
835
	};
836
    };
837
 
838
    // ENTRY DECLARATIONS:
839
    entry-list [
840
	entry = {
841
	    id = identifier;
842
	    <add-entry> (&id);
843
	  ##
844
	    <expected-identifier>;
845
	};
846
    ] = {
847
	entry;
848
	{
849
	    ? = <is-terminator>;
850
	  ||
851
	    separator;
852
	    entry-list;
853
	  ##
854
	    <expected-separator>;
855
	    <skip-to-end-of-entry-list>;
856
	    <skip-recover>;
857
	    {
858
		? = <is-not-separator>;
859
	      ##
860
		entry-list;
861
	    };
862
	};
863
    };
864
] /* sid-parse-grammar */ = {
865
    <init>;
866
    {
867
	blt-types;
868
      ##
869
	<expected-blt-types>;
870
    };
871
    type-decl-list;
872
    {
873
	blt-terminals;
874
      ##
875
	<expected-blt-terminals>;
876
    };
877
    terminal-decn-list;
878
    <x-terminals>;
879
    {
880
	blt-productions;
881
      ##
882
	<expected-blt-productions>;
883
    };
884
    production-defn-list;
885
    {
886
	blt-entry;
887
      ##
888
	<expected-blt-entry>;
889
    };
890
    entry-list;
891
    {
892
	terminator;
893
      ##
894
	<expected-terminator>;
895
    };
896
    {
897
	eof;
898
      ##
899
	<expected-eof>;
900
    };
901
  ##
902
    <unhandled-syntax-error>;
903
};
904
 
905
%entry% sid-parse-grammar;