File Coverage

blib/lib/Language/MinCaml/Parser.pm
Criterion Covered Total %
statement 24 84 28.5
branch 1 6 16.6
condition n/a
subroutine 8 51 15.6
pod 0 4 0.0
total 33 145 22.7


line stmt bran cond sub pod time code
1             package Language::MinCaml::Parser;
2 3     3   18 use strict;
  3         8  
  3         136  
3 3     3   19 use base qw(Parse::Yapp::Driver);
  3         7  
  3         3079  
4 3     3   7425 use Carp;
  3         8  
  3         320  
5 3     3   23 use Language::MinCaml::Type;
  3         7  
  3         35  
6 3     3   1705 use Language::MinCaml::Node;
  3         7  
  3         28  
7 3     3   96 use Language::MinCaml::Util;
  3         7  
  3         14830  
8              
9             sub new {
10 2     2 0 21 my $class = shift;
11 2 50       5 ref($class) and $class = ref($class);
12              
13             my $self = $class->SUPER::new( yyversion => '1.05',
14             yystates =>
15             [
16             { #State 0
17             ACTIONS => {
18             'BOOL' => 2,
19             'MINUS' => 3,
20             'LPAREN' => 6,
21             'INT' => 5,
22             'ARRAY_CREATE' => 4,
23             'NOT' => 8,
24             'LET' => 7,
25             'IDENT' => 10,
26             'MINUS_DOT' => 12,
27             'IF' => 13,
28             'FLOAT' => 14
29             },
30             GOTOS => {
31             'exp' => 1,
32             'simple_exp' => 11,
33             'elems' => 9
34             }
35             },
36             { #State 1
37             ACTIONS => {
38             '' => 15,
39             'GREATER_EQUAL' => 16,
40             'BOOL' => 2,
41             'MINUS' => 17,
42             'SLASH_DOT' => 18,
43             'LPAREN' => 6,
44             'PLUS' => 19,
45             'IDENT' => 10,
46             'LESS' => 20,
47             'AST_DOT' => 21,
48             'EQUAL' => 22,
49             'FLOAT' => 14,
50             'SEMICOLON' => 23,
51             'LESS_EQUAL' => 24,
52             'INT' => 5,
53             'COMMA' => 25,
54             'GREATER' => 26,
55             'MINUS_DOT' => 28,
56             'PLUS_DOT' => 30,
57             'LESS_GREATER' => 31
58             },
59             GOTOS => {
60             'simple_exp' => 27,
61             'actual_args' => 29
62             }
63             },
64             { #State 2
65             DEFAULT => -3
66             },
67             { #State 3
68             ACTIONS => {
69             'BOOL' => 2,
70             'MINUS' => 3,
71             'INT' => 5,
72             'LPAREN' => 6,
73             'ARRAY_CREATE' => 4,
74             'NOT' => 8,
75             'LET' => 7,
76             'IDENT' => 10,
77             'MINUS_DOT' => 12,
78             'IF' => 13,
79             'FLOAT' => 14
80             },
81             GOTOS => {
82             'exp' => 32,
83             'simple_exp' => 11,
84             'elems' => 9
85             }
86             },
87             { #State 4
88             ACTIONS => {
89             'BOOL' => 2,
90             'INT' => 5,
91             'LPAREN' => 6,
92             'IDENT' => 10,
93             'FLOAT' => 14
94             },
95             GOTOS => {
96             'simple_exp' => 33
97             }
98             },
99             { #State 5
100             DEFAULT => -4
101             },
102             { #State 6
103             ACTIONS => {
104             'BOOL' => 2,
105             'RPAREN' => 34,
106             'MINUS' => 3,
107             'INT' => 5,
108             'LPAREN' => 6,
109             'ARRAY_CREATE' => 4,
110             'NOT' => 8,
111             'LET' => 7,
112             'IDENT' => 10,
113             'MINUS_DOT' => 12,
114             'IF' => 13,
115             'FLOAT' => 14
116             },
117             GOTOS => {
118             'exp' => 35,
119             'simple_exp' => 11,
120             'elems' => 9
121             }
122             },
123             { #State 7
124             ACTIONS => {
125             'REC' => 38,
126             'LPAREN' => 36,
127             'IDENT' => 37
128             }
129             },
130             { #State 8
131             ACTIONS => {
132             'BOOL' => 2,
133             'MINUS' => 3,
134             'INT' => 5,
135             'LPAREN' => 6,
136             'ARRAY_CREATE' => 4,
137             'NOT' => 8,
138             'LET' => 7,
139             'IDENT' => 10,
140             'MINUS_DOT' => 12,
141             'IF' => 13,
142             'FLOAT' => 14
143             },
144             GOTOS => {
145             'exp' => 39,
146             'simple_exp' => 11,
147             'elems' => 9
148             }
149             },
150             { #State 9
151             ACTIONS => {
152             'COMMA' => 40
153             },
154             DEFAULT => -28
155             },
156             { #State 10
157             DEFAULT => -6
158             },
159             { #State 11
160             ACTIONS => {
161             'DOT' => 41
162             },
163             DEFAULT => -8
164             },
165             { #State 12
166             ACTIONS => {
167             'BOOL' => 2,
168             'MINUS' => 3,
169             'INT' => 5,
170             'LPAREN' => 6,
171             'ARRAY_CREATE' => 4,
172             'NOT' => 8,
173             'LET' => 7,
174             'IDENT' => 10,
175             'MINUS_DOT' => 12,
176             'IF' => 13,
177             'FLOAT' => 14
178             },
179             GOTOS => {
180             'exp' => 42,
181             'simple_exp' => 11,
182             'elems' => 9
183             }
184             },
185             { #State 13
186             ACTIONS => {
187             'BOOL' => 2,
188             'MINUS' => 3,
189             'INT' => 5,
190             'LPAREN' => 6,
191             'ARRAY_CREATE' => 4,
192             'NOT' => 8,
193             'LET' => 7,
194             'IDENT' => 10,
195             'MINUS_DOT' => 12,
196             'IF' => 13,
197             'FLOAT' => 14
198             },
199             GOTOS => {
200             'exp' => 43,
201             'simple_exp' => 11,
202             'elems' => 9
203             }
204             },
205             { #State 14
206             DEFAULT => -5
207             },
208             { #State 15
209             DEFAULT => 0
210             },
211             { #State 16
212             ACTIONS => {
213             'BOOL' => 2,
214             'MINUS' => 3,
215             'INT' => 5,
216             'LPAREN' => 6,
217             'ARRAY_CREATE' => 4,
218             'NOT' => 8,
219             'LET' => 7,
220             'IDENT' => 10,
221             'MINUS_DOT' => 12,
222             'IF' => 13,
223             'FLOAT' => 14
224             },
225             GOTOS => {
226             'exp' => 44,
227             'simple_exp' => 11,
228             'elems' => 9
229             }
230             },
231             { #State 17
232             ACTIONS => {
233             'BOOL' => 2,
234             'MINUS' => 3,
235             'INT' => 5,
236             'LPAREN' => 6,
237             'ARRAY_CREATE' => 4,
238             'NOT' => 8,
239             'LET' => 7,
240             'IDENT' => 10,
241             'MINUS_DOT' => 12,
242             'IF' => 13,
243             'FLOAT' => 14
244             },
245             GOTOS => {
246             'exp' => 45,
247             'simple_exp' => 11,
248             'elems' => 9
249             }
250             },
251             { #State 18
252             ACTIONS => {
253             'BOOL' => 2,
254             'MINUS' => 3,
255             'INT' => 5,
256             'LPAREN' => 6,
257             'ARRAY_CREATE' => 4,
258             'NOT' => 8,
259             'LET' => 7,
260             'IDENT' => 10,
261             'MINUS_DOT' => 12,
262             'IF' => 13,
263             'FLOAT' => 14
264             },
265             GOTOS => {
266             'exp' => 46,
267             'simple_exp' => 11,
268             'elems' => 9
269             }
270             },
271             { #State 19
272             ACTIONS => {
273             'BOOL' => 2,
274             'MINUS' => 3,
275             'INT' => 5,
276             'LPAREN' => 6,
277             'ARRAY_CREATE' => 4,
278             'NOT' => 8,
279             'LET' => 7,
280             'IDENT' => 10,
281             'MINUS_DOT' => 12,
282             'IF' => 13,
283             'FLOAT' => 14
284             },
285             GOTOS => {
286             'exp' => 47,
287             'simple_exp' => 11,
288             'elems' => 9
289             }
290             },
291             { #State 20
292             ACTIONS => {
293             'BOOL' => 2,
294             'MINUS' => 3,
295             'INT' => 5,
296             'LPAREN' => 6,
297             'ARRAY_CREATE' => 4,
298             'NOT' => 8,
299             'LET' => 7,
300             'IDENT' => 10,
301             'MINUS_DOT' => 12,
302             'IF' => 13,
303             'FLOAT' => 14
304             },
305             GOTOS => {
306             'exp' => 48,
307             'simple_exp' => 11,
308             'elems' => 9
309             }
310             },
311             { #State 21
312             ACTIONS => {
313             'BOOL' => 2,
314             'MINUS' => 3,
315             'INT' => 5,
316             'LPAREN' => 6,
317             'ARRAY_CREATE' => 4,
318             'NOT' => 8,
319             'LET' => 7,
320             'IDENT' => 10,
321             'MINUS_DOT' => 12,
322             'IF' => 13,
323             'FLOAT' => 14
324             },
325             GOTOS => {
326             'exp' => 49,
327             'simple_exp' => 11,
328             'elems' => 9
329             }
330             },
331             { #State 22
332             ACTIONS => {
333             'BOOL' => 2,
334             'MINUS' => 3,
335             'INT' => 5,
336             'LPAREN' => 6,
337             'ARRAY_CREATE' => 4,
338             'NOT' => 8,
339             'LET' => 7,
340             'IDENT' => 10,
341             'MINUS_DOT' => 12,
342             'IF' => 13,
343             'FLOAT' => 14
344             },
345             GOTOS => {
346             'exp' => 50,
347             'simple_exp' => 11,
348             'elems' => 9
349             }
350             },
351             { #State 23
352             ACTIONS => {
353             'BOOL' => 2,
354             'MINUS' => 3,
355             'INT' => 5,
356             'LPAREN' => 6,
357             'ARRAY_CREATE' => 4,
358             'NOT' => 8,
359             'LET' => 7,
360             'IDENT' => 10,
361             'MINUS_DOT' => 12,
362             'IF' => 13,
363             'FLOAT' => 14
364             },
365             GOTOS => {
366             'exp' => 51,
367             'simple_exp' => 11,
368             'elems' => 9
369             }
370             },
371             { #State 24
372             ACTIONS => {
373             'BOOL' => 2,
374             'MINUS' => 3,
375             'INT' => 5,
376             'LPAREN' => 6,
377             'ARRAY_CREATE' => 4,
378             'NOT' => 8,
379             'LET' => 7,
380             'IDENT' => 10,
381             'MINUS_DOT' => 12,
382             'IF' => 13,
383             'FLOAT' => 14
384             },
385             GOTOS => {
386             'exp' => 52,
387             'simple_exp' => 11,
388             'elems' => 9
389             }
390             },
391             { #State 25
392             ACTIONS => {
393             'BOOL' => 2,
394             'MINUS' => 3,
395             'INT' => 5,
396             'LPAREN' => 6,
397             'ARRAY_CREATE' => 4,
398             'NOT' => 8,
399             'LET' => 7,
400             'IDENT' => 10,
401             'MINUS_DOT' => 12,
402             'IF' => 13,
403             'FLOAT' => 14
404             },
405             GOTOS => {
406             'exp' => 53,
407             'simple_exp' => 11,
408             'elems' => 9
409             }
410             },
411             { #State 26
412             ACTIONS => {
413             'BOOL' => 2,
414             'MINUS' => 3,
415             'INT' => 5,
416             'LPAREN' => 6,
417             'ARRAY_CREATE' => 4,
418             'NOT' => 8,
419             'LET' => 7,
420             'IDENT' => 10,
421             'MINUS_DOT' => 12,
422             'IF' => 13,
423             'FLOAT' => 14
424             },
425             GOTOS => {
426             'exp' => 54,
427             'simple_exp' => 11,
428             'elems' => 9
429             }
430             },
431             { #State 27
432             ACTIONS => {
433             'DOT' => 55
434             },
435             DEFAULT => -37
436             },
437             { #State 28
438             ACTIONS => {
439             'BOOL' => 2,
440             'MINUS' => 3,
441             'INT' => 5,
442             'LPAREN' => 6,
443             'ARRAY_CREATE' => 4,
444             'NOT' => 8,
445             'LET' => 7,
446             'IDENT' => 10,
447             'MINUS_DOT' => 12,
448             'IF' => 13,
449             'FLOAT' => 14
450             },
451             GOTOS => {
452             'exp' => 56,
453             'simple_exp' => 11,
454             'elems' => 9
455             }
456             },
457             { #State 29
458             ACTIONS => {
459             'BOOL' => 2,
460             'LPAREN' => 6,
461             'IDENT' => 10,
462             'FLOAT' => 14,
463             'INT' => 5
464             },
465             DEFAULT => -27,
466             GOTOS => {
467             'simple_exp' => 57
468             }
469             },
470             { #State 30
471             ACTIONS => {
472             'BOOL' => 2,
473             'MINUS' => 3,
474             'INT' => 5,
475             'LPAREN' => 6,
476             'ARRAY_CREATE' => 4,
477             'NOT' => 8,
478             'LET' => 7,
479             'IDENT' => 10,
480             'MINUS_DOT' => 12,
481             'IF' => 13,
482             'FLOAT' => 14
483             },
484             GOTOS => {
485             'exp' => 58,
486             'simple_exp' => 11,
487             'elems' => 9
488             }
489             },
490             { #State 31
491             ACTIONS => {
492             'BOOL' => 2,
493             'MINUS' => 3,
494             'INT' => 5,
495             'LPAREN' => 6,
496             'ARRAY_CREATE' => 4,
497             'NOT' => 8,
498             'LET' => 7,
499             'IDENT' => 10,
500             'MINUS_DOT' => 12,
501             'IF' => 13,
502             'FLOAT' => 14
503             },
504             GOTOS => {
505             'exp' => 59,
506             'simple_exp' => 11,
507             'elems' => 9
508             }
509             },
510             { #State 32
511             ACTIONS => {
512             'BOOL' => 2,
513             'LPAREN' => 6,
514             'IDENT' => 10,
515             'FLOAT' => 14,
516             'INT' => 5
517             },
518             DEFAULT => -10,
519             GOTOS => {
520             'simple_exp' => 27,
521             'actual_args' => 29
522             }
523             },
524             { #State 33
525             ACTIONS => {
526             'BOOL' => 2,
527             'DOT' => 55,
528             'INT' => 5,
529             'LPAREN' => 6,
530             'IDENT' => 10,
531             'FLOAT' => 14
532             },
533             GOTOS => {
534             'simple_exp' => 60
535             }
536             },
537             { #State 34
538             DEFAULT => -2
539             },
540             { #State 35
541             ACTIONS => {
542             'GREATER_EQUAL' => 16,
543             'BOOL' => 2,
544             'RPAREN' => 61,
545             'MINUS' => 17,
546             'SLASH_DOT' => 18,
547             'LPAREN' => 6,
548             'PLUS' => 19,
549             'IDENT' => 10,
550             'LESS' => 20,
551             'AST_DOT' => 21,
552             'EQUAL' => 22,
553             'FLOAT' => 14,
554             'SEMICOLON' => 23,
555             'LESS_EQUAL' => 24,
556             'INT' => 5,
557             'COMMA' => 25,
558             'GREATER' => 26,
559             'MINUS_DOT' => 28,
560             'PLUS_DOT' => 30,
561             'LESS_GREATER' => 31
562             },
563             GOTOS => {
564             'simple_exp' => 27,
565             'actual_args' => 29
566             }
567             },
568             { #State 36
569             ACTIONS => {
570             'IDENT' => 63
571             },
572             GOTOS => {
573             'pat' => 62
574             }
575             },
576             { #State 37
577             ACTIONS => {
578             'EQUAL' => 64
579             }
580             },
581             { #State 38
582             ACTIONS => {
583             'IDENT' => 65
584             },
585             GOTOS => {
586             'fundef' => 66
587             }
588             },
589             { #State 39
590             ACTIONS => {
591             'BOOL' => 2,
592             'LPAREN' => 6,
593             'IDENT' => 10,
594             'FLOAT' => 14,
595             'INT' => 5
596             },
597             DEFAULT => -9,
598             GOTOS => {
599             'simple_exp' => 27,
600             'actual_args' => 29
601             }
602             },
603             { #State 40
604             ACTIONS => {
605             'BOOL' => 2,
606             'MINUS' => 3,
607             'INT' => 5,
608             'LPAREN' => 6,
609             'ARRAY_CREATE' => 4,
610             'NOT' => 8,
611             'LET' => 7,
612             'IDENT' => 10,
613             'MINUS_DOT' => 12,
614             'IF' => 13,
615             'FLOAT' => 14
616             },
617             GOTOS => {
618             'exp' => 67,
619             'simple_exp' => 11,
620             'elems' => 9
621             }
622             },
623             { #State 41
624             ACTIONS => {
625             'LPAREN' => 68
626             }
627             },
628             { #State 42
629             ACTIONS => {
630             'BOOL' => 2,
631             'LPAREN' => 6,
632             'IDENT' => 10,
633             'FLOAT' => 14,
634             'INT' => 5
635             },
636             DEFAULT => -20,
637             GOTOS => {
638             'simple_exp' => 27,
639             'actual_args' => 29
640             }
641             },
642             { #State 43
643             ACTIONS => {
644             'GREATER_EQUAL' => 16,
645             'BOOL' => 2,
646             'MINUS' => 17,
647             'SLASH_DOT' => 18,
648             'LPAREN' => 6,
649             'PLUS' => 19,
650             'IDENT' => 10,
651             'LESS' => 20,
652             'AST_DOT' => 21,
653             'EQUAL' => 22,
654             'THEN' => 69,
655             'FLOAT' => 14,
656             'SEMICOLON' => 23,
657             'LESS_EQUAL' => 24,
658             'INT' => 5,
659             'COMMA' => 25,
660             'GREATER' => 26,
661             'MINUS_DOT' => 28,
662             'PLUS_DOT' => 30,
663             'LESS_GREATER' => 31
664             },
665             GOTOS => {
666             'simple_exp' => 27,
667             'actual_args' => 29
668             }
669             },
670             { #State 44
671             ACTIONS => {
672             'BOOL' => 2,
673             'MINUS' => 17,
674             'SLASH_DOT' => 18,
675             'LPAREN' => 6,
676             'PLUS' => 19,
677             'IDENT' => 10,
678             'AST_DOT' => 21,
679             'FLOAT' => 14,
680             'INT' => 5,
681             'MINUS_DOT' => 28,
682             'PLUS_DOT' => 30
683             },
684             DEFAULT => -18,
685             GOTOS => {
686             'simple_exp' => 27,
687             'actual_args' => 29
688             }
689             },
690             { #State 45
691             ACTIONS => {
692             'BOOL' => 2,
693             'SLASH_DOT' => 18,
694             'LPAREN' => 6,
695             'IDENT' => 10,
696             'AST_DOT' => 21,
697             'FLOAT' => 14,
698             'INT' => 5
699             },
700             DEFAULT => -12,
701             GOTOS => {
702             'simple_exp' => 27,
703             'actual_args' => 29
704             }
705             },
706             { #State 46
707             ACTIONS => {
708             'BOOL' => 2,
709             'LPAREN' => 6,
710             'IDENT' => 10,
711             'FLOAT' => 14,
712             'INT' => 5
713             },
714             DEFAULT => -24,
715             GOTOS => {
716             'simple_exp' => 27,
717             'actual_args' => 29
718             }
719             },
720             { #State 47
721             ACTIONS => {
722             'BOOL' => 2,
723             'SLASH_DOT' => 18,
724             'LPAREN' => 6,
725             'IDENT' => 10,
726             'AST_DOT' => 21,
727             'FLOAT' => 14,
728             'INT' => 5
729             },
730             DEFAULT => -11,
731             GOTOS => {
732             'simple_exp' => 27,
733             'actual_args' => 29
734             }
735             },
736             { #State 48
737             ACTIONS => {
738             'BOOL' => 2,
739             'MINUS' => 17,
740             'SLASH_DOT' => 18,
741             'LPAREN' => 6,
742             'PLUS' => 19,
743             'IDENT' => 10,
744             'AST_DOT' => 21,
745             'FLOAT' => 14,
746             'INT' => 5,
747             'MINUS_DOT' => 28,
748             'PLUS_DOT' => 30
749             },
750             DEFAULT => -15,
751             GOTOS => {
752             'simple_exp' => 27,
753             'actual_args' => 29
754             }
755             },
756             { #State 49
757             ACTIONS => {
758             'BOOL' => 2,
759             'LPAREN' => 6,
760             'IDENT' => 10,
761             'FLOAT' => 14,
762             'INT' => 5
763             },
764             DEFAULT => -23,
765             GOTOS => {
766             'simple_exp' => 27,
767             'actual_args' => 29
768             }
769             },
770             { #State 50
771             ACTIONS => {
772             'BOOL' => 2,
773             'MINUS' => 17,
774             'SLASH_DOT' => 18,
775             'LPAREN' => 6,
776             'PLUS' => 19,
777             'IDENT' => 10,
778             'AST_DOT' => 21,
779             'FLOAT' => 14,
780             'INT' => 5,
781             'MINUS_DOT' => 28,
782             'PLUS_DOT' => 30
783             },
784             DEFAULT => -13,
785             GOTOS => {
786             'simple_exp' => 27,
787             'actual_args' => 29
788             }
789             },
790             { #State 51
791             ACTIONS => {
792             'GREATER_EQUAL' => 16,
793             'BOOL' => 2,
794             'MINUS' => 17,
795             'SLASH_DOT' => 18,
796             'LPAREN' => 6,
797             'PLUS' => 19,
798             'IDENT' => 10,
799             'LESS' => 20,
800             'AST_DOT' => 21,
801             'EQUAL' => 22,
802             'FLOAT' => 14,
803             'SEMICOLON' => 23,
804             'LESS_EQUAL' => 24,
805             'INT' => 5,
806             'COMMA' => 25,
807             'GREATER' => 26,
808             'MINUS_DOT' => 28,
809             'PLUS_DOT' => 30,
810             'LESS_GREATER' => 31
811             },
812             DEFAULT => -31,
813             GOTOS => {
814             'simple_exp' => 27,
815             'actual_args' => 29
816             }
817             },
818             { #State 52
819             ACTIONS => {
820             'BOOL' => 2,
821             'MINUS' => 17,
822             'SLASH_DOT' => 18,
823             'LPAREN' => 6,
824             'PLUS' => 19,
825             'IDENT' => 10,
826             'AST_DOT' => 21,
827             'FLOAT' => 14,
828             'INT' => 5,
829             'MINUS_DOT' => 28,
830             'PLUS_DOT' => 30
831             },
832             DEFAULT => -17,
833             GOTOS => {
834             'simple_exp' => 27,
835             'actual_args' => 29
836             }
837             },
838             { #State 53
839             ACTIONS => {
840             'GREATER_EQUAL' => 16,
841             'BOOL' => 2,
842             'MINUS' => 17,
843             'SLASH_DOT' => 18,
844             'LPAREN' => 6,
845             'PLUS' => 19,
846             'IDENT' => 10,
847             'LESS' => 20,
848             'AST_DOT' => 21,
849             'EQUAL' => 22,
850             'FLOAT' => 14,
851             'LESS_EQUAL' => 24,
852             'INT' => 5,
853             'GREATER' => 26,
854             'MINUS_DOT' => 28,
855             'PLUS_DOT' => 30,
856             'LESS_GREATER' => 31
857             },
858             DEFAULT => -39,
859             GOTOS => {
860             'simple_exp' => 27,
861             'actual_args' => 29
862             }
863             },
864             { #State 54
865             ACTIONS => {
866             'BOOL' => 2,
867             'MINUS' => 17,
868             'SLASH_DOT' => 18,
869             'LPAREN' => 6,
870             'PLUS' => 19,
871             'IDENT' => 10,
872             'AST_DOT' => 21,
873             'FLOAT' => 14,
874             'INT' => 5,
875             'MINUS_DOT' => 28,
876             'PLUS_DOT' => 30
877             },
878             DEFAULT => -16,
879             GOTOS => {
880             'simple_exp' => 27,
881             'actual_args' => 29
882             }
883             },
884             { #State 55
885             ACTIONS => {
886             'LPAREN' => 70
887             }
888             },
889             { #State 56
890             ACTIONS => {
891             'BOOL' => 2,
892             'SLASH_DOT' => 18,
893             'LPAREN' => 6,
894             'IDENT' => 10,
895             'AST_DOT' => 21,
896             'FLOAT' => 14,
897             'INT' => 5
898             },
899             DEFAULT => -22,
900             GOTOS => {
901             'simple_exp' => 27,
902             'actual_args' => 29
903             }
904             },
905             { #State 57
906             ACTIONS => {
907             'DOT' => 55
908             },
909             DEFAULT => -36
910             },
911             { #State 58
912             ACTIONS => {
913             'BOOL' => 2,
914             'SLASH_DOT' => 18,
915             'LPAREN' => 6,
916             'IDENT' => 10,
917             'AST_DOT' => 21,
918             'FLOAT' => 14,
919             'INT' => 5
920             },
921             DEFAULT => -21,
922             GOTOS => {
923             'simple_exp' => 27,
924             'actual_args' => 29
925             }
926             },
927             { #State 59
928             ACTIONS => {
929             'BOOL' => 2,
930             'MINUS' => 17,
931             'SLASH_DOT' => 18,
932             'LPAREN' => 6,
933             'PLUS' => 19,
934             'IDENT' => 10,
935             'AST_DOT' => 21,
936             'FLOAT' => 14,
937             'INT' => 5,
938             'MINUS_DOT' => 28,
939             'PLUS_DOT' => 30
940             },
941             DEFAULT => -14,
942             GOTOS => {
943             'simple_exp' => 27,
944             'actual_args' => 29
945             }
946             },
947             { #State 60
948             ACTIONS => {
949             'DOT' => 55
950             },
951             DEFAULT => -32
952             },
953             { #State 61
954             DEFAULT => -1
955             },
956             { #State 62
957             ACTIONS => {
958             'RPAREN' => 71,
959             'COMMA' => 72
960             }
961             },
962             { #State 63
963             ACTIONS => {
964             'COMMA' => 73
965             }
966             },
967             { #State 64
968             ACTIONS => {
969             'BOOL' => 2,
970             'MINUS' => 3,
971             'INT' => 5,
972             'LPAREN' => 6,
973             'ARRAY_CREATE' => 4,
974             'NOT' => 8,
975             'LET' => 7,
976             'IDENT' => 10,
977             'MINUS_DOT' => 12,
978             'IF' => 13,
979             'FLOAT' => 14
980             },
981             GOTOS => {
982             'exp' => 74,
983             'simple_exp' => 11,
984             'elems' => 9
985             }
986             },
987             { #State 65
988             ACTIONS => {
989             'IDENT' => 75
990             },
991             GOTOS => {
992             'formal_args' => 76
993             }
994             },
995             { #State 66
996             ACTIONS => {
997             'IN' => 77
998             }
999             },
1000             { #State 67
1001             ACTIONS => {
1002             'GREATER_EQUAL' => 16,
1003             'BOOL' => 2,
1004             'MINUS' => 17,
1005             'SLASH_DOT' => 18,
1006             'LPAREN' => 6,
1007             'PLUS' => 19,
1008             'IDENT' => 10,
1009             'LESS' => 20,
1010             'AST_DOT' => 21,
1011             'EQUAL' => 22,
1012             'FLOAT' => 14,
1013             'LESS_EQUAL' => 24,
1014             'INT' => 5,
1015             'GREATER' => 26,
1016             'MINUS_DOT' => 28,
1017             'PLUS_DOT' => 30,
1018             'LESS_GREATER' => 31
1019             },
1020             DEFAULT => -38,
1021             GOTOS => {
1022             'simple_exp' => 27,
1023             'actual_args' => 29
1024             }
1025             },
1026             { #State 68
1027             ACTIONS => {
1028             'BOOL' => 2,
1029             'MINUS' => 3,
1030             'INT' => 5,
1031             'LPAREN' => 6,
1032             'ARRAY_CREATE' => 4,
1033             'NOT' => 8,
1034             'LET' => 7,
1035             'IDENT' => 10,
1036             'MINUS_DOT' => 12,
1037             'IF' => 13,
1038             'FLOAT' => 14
1039             },
1040             GOTOS => {
1041             'exp' => 78,
1042             'simple_exp' => 11,
1043             'elems' => 9
1044             }
1045             },
1046             { #State 69
1047             ACTIONS => {
1048             'BOOL' => 2,
1049             'MINUS' => 3,
1050             'INT' => 5,
1051             'LPAREN' => 6,
1052             'ARRAY_CREATE' => 4,
1053             'NOT' => 8,
1054             'LET' => 7,
1055             'IDENT' => 10,
1056             'MINUS_DOT' => 12,
1057             'IF' => 13,
1058             'FLOAT' => 14
1059             },
1060             GOTOS => {
1061             'exp' => 79,
1062             'simple_exp' => 11,
1063             'elems' => 9
1064             }
1065             },
1066             { #State 70
1067             ACTIONS => {
1068             'BOOL' => 2,
1069             'MINUS' => 3,
1070             'INT' => 5,
1071             'LPAREN' => 6,
1072             'ARRAY_CREATE' => 4,
1073             'NOT' => 8,
1074             'LET' => 7,
1075             'IDENT' => 10,
1076             'MINUS_DOT' => 12,
1077             'IF' => 13,
1078             'FLOAT' => 14
1079             },
1080             GOTOS => {
1081             'exp' => 80,
1082             'simple_exp' => 11,
1083             'elems' => 9
1084             }
1085             },
1086             { #State 71
1087             ACTIONS => {
1088             'EQUAL' => 81
1089             }
1090             },
1091             { #State 72
1092             ACTIONS => {
1093             'IDENT' => 82
1094             }
1095             },
1096             { #State 73
1097             ACTIONS => {
1098             'IDENT' => 83
1099             }
1100             },
1101             { #State 74
1102             ACTIONS => {
1103             'GREATER_EQUAL' => 16,
1104             'BOOL' => 2,
1105             'MINUS' => 17,
1106             'SLASH_DOT' => 18,
1107             'LPAREN' => 6,
1108             'PLUS' => 19,
1109             'IDENT' => 10,
1110             'LESS' => 20,
1111             'AST_DOT' => 21,
1112             'EQUAL' => 22,
1113             'FLOAT' => 14,
1114             'SEMICOLON' => 23,
1115             'LESS_EQUAL' => 24,
1116             'INT' => 5,
1117             'COMMA' => 25,
1118             'IN' => 84,
1119             'GREATER' => 26,
1120             'MINUS_DOT' => 28,
1121             'PLUS_DOT' => 30,
1122             'LESS_GREATER' => 31
1123             },
1124             GOTOS => {
1125             'simple_exp' => 27,
1126             'actual_args' => 29
1127             }
1128             },
1129             { #State 75
1130             ACTIONS => {
1131             'IDENT' => 75
1132             },
1133             DEFAULT => -35,
1134             GOTOS => {
1135             'formal_args' => 85
1136             }
1137             },
1138             { #State 76
1139             ACTIONS => {
1140             'EQUAL' => 86
1141             }
1142             },
1143             { #State 77
1144             ACTIONS => {
1145             'BOOL' => 2,
1146             'MINUS' => 3,
1147             'INT' => 5,
1148             'LPAREN' => 6,
1149             'ARRAY_CREATE' => 4,
1150             'NOT' => 8,
1151             'LET' => 7,
1152             'IDENT' => 10,
1153             'MINUS_DOT' => 12,
1154             'IF' => 13,
1155             'FLOAT' => 14
1156             },
1157             GOTOS => {
1158             'exp' => 87,
1159             'simple_exp' => 11,
1160             'elems' => 9
1161             }
1162             },
1163             { #State 78
1164             ACTIONS => {
1165             'GREATER_EQUAL' => 16,
1166             'BOOL' => 2,
1167             'RPAREN' => 88,
1168             'MINUS' => 17,
1169             'SLASH_DOT' => 18,
1170             'LPAREN' => 6,
1171             'PLUS' => 19,
1172             'IDENT' => 10,
1173             'LESS' => 20,
1174             'AST_DOT' => 21,
1175             'EQUAL' => 22,
1176             'FLOAT' => 14,
1177             'SEMICOLON' => 23,
1178             'LESS_EQUAL' => 24,
1179             'INT' => 5,
1180             'COMMA' => 25,
1181             'GREATER' => 26,
1182             'MINUS_DOT' => 28,
1183             'PLUS_DOT' => 30,
1184             'LESS_GREATER' => 31
1185             },
1186             GOTOS => {
1187             'simple_exp' => 27,
1188             'actual_args' => 29
1189             }
1190             },
1191             { #State 79
1192             ACTIONS => {
1193             'GREATER_EQUAL' => 16,
1194             'BOOL' => 2,
1195             'MINUS' => 17,
1196             'SLASH_DOT' => 18,
1197             'LPAREN' => 6,
1198             'PLUS' => 19,
1199             'IDENT' => 10,
1200             'LESS' => 20,
1201             'AST_DOT' => 21,
1202             'EQUAL' => 22,
1203             'FLOAT' => 14,
1204             'SEMICOLON' => 23,
1205             'LESS_EQUAL' => 24,
1206             'INT' => 5,
1207             'ELSE' => 89,
1208             'COMMA' => 25,
1209             'GREATER' => 26,
1210             'MINUS_DOT' => 28,
1211             'PLUS_DOT' => 30,
1212             'LESS_GREATER' => 31
1213             },
1214             GOTOS => {
1215             'simple_exp' => 27,
1216             'actual_args' => 29
1217             }
1218             },
1219             { #State 80
1220             ACTIONS => {
1221             'GREATER_EQUAL' => 16,
1222             'BOOL' => 2,
1223             'RPAREN' => 90,
1224             'MINUS' => 17,
1225             'SLASH_DOT' => 18,
1226             'LPAREN' => 6,
1227             'PLUS' => 19,
1228             'IDENT' => 10,
1229             'LESS' => 20,
1230             'AST_DOT' => 21,
1231             'EQUAL' => 22,
1232             'FLOAT' => 14,
1233             'SEMICOLON' => 23,
1234             'LESS_EQUAL' => 24,
1235             'INT' => 5,
1236             'COMMA' => 25,
1237             'GREATER' => 26,
1238             'MINUS_DOT' => 28,
1239             'PLUS_DOT' => 30,
1240             'LESS_GREATER' => 31
1241             },
1242             GOTOS => {
1243             'simple_exp' => 27,
1244             'actual_args' => 29
1245             }
1246             },
1247             { #State 81
1248             ACTIONS => {
1249             'BOOL' => 2,
1250             'MINUS' => 3,
1251             'INT' => 5,
1252             'LPAREN' => 6,
1253             'ARRAY_CREATE' => 4,
1254             'NOT' => 8,
1255             'LET' => 7,
1256             'IDENT' => 10,
1257             'MINUS_DOT' => 12,
1258             'IF' => 13,
1259             'FLOAT' => 14
1260             },
1261             GOTOS => {
1262             'exp' => 91,
1263             'simple_exp' => 11,
1264             'elems' => 9
1265             }
1266             },
1267             { #State 82
1268             DEFAULT => -40
1269             },
1270             { #State 83
1271             DEFAULT => -41
1272             },
1273             { #State 84
1274             ACTIONS => {
1275             'BOOL' => 2,
1276             'MINUS' => 3,
1277             'INT' => 5,
1278             'LPAREN' => 6,
1279             'ARRAY_CREATE' => 4,
1280             'NOT' => 8,
1281             'LET' => 7,
1282             'IDENT' => 10,
1283             'MINUS_DOT' => 12,
1284             'IF' => 13,
1285             'FLOAT' => 14
1286             },
1287             GOTOS => {
1288             'exp' => 92,
1289             'simple_exp' => 11,
1290             'elems' => 9
1291             }
1292             },
1293             { #State 85
1294             DEFAULT => -34
1295             },
1296             { #State 86
1297             ACTIONS => {
1298             'BOOL' => 2,
1299             'MINUS' => 3,
1300             'INT' => 5,
1301             'LPAREN' => 6,
1302             'ARRAY_CREATE' => 4,
1303             'NOT' => 8,
1304             'LET' => 7,
1305             'IDENT' => 10,
1306             'MINUS_DOT' => 12,
1307             'IF' => 13,
1308             'FLOAT' => 14
1309             },
1310             GOTOS => {
1311             'exp' => 93,
1312             'simple_exp' => 11,
1313             'elems' => 9
1314             }
1315             },
1316             { #State 87
1317             ACTIONS => {
1318             'GREATER_EQUAL' => 16,
1319             'BOOL' => 2,
1320             'MINUS' => 17,
1321             'SLASH_DOT' => 18,
1322             'LPAREN' => 6,
1323             'PLUS' => 19,
1324             'IDENT' => 10,
1325             'LESS' => 20,
1326             'AST_DOT' => 21,
1327             'EQUAL' => 22,
1328             'FLOAT' => 14,
1329             'SEMICOLON' => 23,
1330             'LESS_EQUAL' => 24,
1331             'INT' => 5,
1332             'COMMA' => 25,
1333             'GREATER' => 26,
1334             'MINUS_DOT' => 28,
1335             'PLUS_DOT' => 30,
1336             'LESS_GREATER' => 31
1337             },
1338             DEFAULT => -26,
1339             GOTOS => {
1340             'simple_exp' => 27,
1341             'actual_args' => 29
1342             }
1343             },
1344             { #State 88
1345             ACTIONS => {
1346             'LESS_MINUS' => 94
1347             },
1348             DEFAULT => -7
1349             },
1350             { #State 89
1351             ACTIONS => {
1352             'BOOL' => 2,
1353             'MINUS' => 3,
1354             'INT' => 5,
1355             'LPAREN' => 6,
1356             'ARRAY_CREATE' => 4,
1357             'NOT' => 8,
1358             'LET' => 7,
1359             'IDENT' => 10,
1360             'MINUS_DOT' => 12,
1361             'IF' => 13,
1362             'FLOAT' => 14
1363             },
1364             GOTOS => {
1365             'exp' => 95,
1366             'simple_exp' => 11,
1367             'elems' => 9
1368             }
1369             },
1370             { #State 90
1371             DEFAULT => -7
1372             },
1373             { #State 91
1374             ACTIONS => {
1375             'GREATER_EQUAL' => 16,
1376             'BOOL' => 2,
1377             'MINUS' => 17,
1378             'SLASH_DOT' => 18,
1379             'LPAREN' => 6,
1380             'PLUS' => 19,
1381             'IDENT' => 10,
1382             'LESS' => 20,
1383             'AST_DOT' => 21,
1384             'EQUAL' => 22,
1385             'FLOAT' => 14,
1386             'SEMICOLON' => 23,
1387             'LESS_EQUAL' => 24,
1388             'INT' => 5,
1389             'COMMA' => 25,
1390             'IN' => 96,
1391             'GREATER' => 26,
1392             'MINUS_DOT' => 28,
1393             'PLUS_DOT' => 30,
1394             'LESS_GREATER' => 31
1395             },
1396             GOTOS => {
1397             'simple_exp' => 27,
1398             'actual_args' => 29
1399             }
1400             },
1401             { #State 92
1402             ACTIONS => {
1403             'GREATER_EQUAL' => 16,
1404             'BOOL' => 2,
1405             'MINUS' => 17,
1406             'SLASH_DOT' => 18,
1407             'LPAREN' => 6,
1408             'PLUS' => 19,
1409             'IDENT' => 10,
1410             'LESS' => 20,
1411             'AST_DOT' => 21,
1412             'EQUAL' => 22,
1413             'FLOAT' => 14,
1414             'SEMICOLON' => 23,
1415             'LESS_EQUAL' => 24,
1416             'INT' => 5,
1417             'COMMA' => 25,
1418             'GREATER' => 26,
1419             'MINUS_DOT' => 28,
1420             'PLUS_DOT' => 30,
1421             'LESS_GREATER' => 31
1422             },
1423             DEFAULT => -25,
1424             GOTOS => {
1425             'simple_exp' => 27,
1426             'actual_args' => 29
1427             }
1428             },
1429             { #State 93
1430             ACTIONS => {
1431             'GREATER_EQUAL' => 16,
1432             'BOOL' => 2,
1433             'MINUS' => 17,
1434             'SLASH_DOT' => 18,
1435             'LPAREN' => 6,
1436             'PLUS' => 19,
1437             'IDENT' => 10,
1438             'LESS' => 20,
1439             'AST_DOT' => 21,
1440             'EQUAL' => 22,
1441             'FLOAT' => 14,
1442             'SEMICOLON' => 23,
1443             'LESS_EQUAL' => 24,
1444             'INT' => 5,
1445             'COMMA' => 25,
1446             'GREATER' => 26,
1447             'MINUS_DOT' => 28,
1448             'PLUS_DOT' => 30,
1449             'LESS_GREATER' => 31
1450             },
1451             DEFAULT => -33,
1452             GOTOS => {
1453             'simple_exp' => 27,
1454             'actual_args' => 29
1455             }
1456             },
1457             { #State 94
1458             ACTIONS => {
1459             'BOOL' => 2,
1460             'MINUS' => 3,
1461             'INT' => 5,
1462             'LPAREN' => 6,
1463             'ARRAY_CREATE' => 4,
1464             'NOT' => 8,
1465             'LET' => 7,
1466             'IDENT' => 10,
1467             'MINUS_DOT' => 12,
1468             'IF' => 13,
1469             'FLOAT' => 14
1470             },
1471             GOTOS => {
1472             'exp' => 97,
1473             'simple_exp' => 11,
1474             'elems' => 9
1475             }
1476             },
1477             { #State 95
1478             ACTIONS => {
1479             'GREATER_EQUAL' => 16,
1480             'BOOL' => 2,
1481             'MINUS' => 17,
1482             'SLASH_DOT' => 18,
1483             'LPAREN' => 6,
1484             'PLUS' => 19,
1485             'IDENT' => 10,
1486             'LESS' => 20,
1487             'AST_DOT' => 21,
1488             'EQUAL' => 22,
1489             'FLOAT' => 14,
1490             'LESS_EQUAL' => 24,
1491             'INT' => 5,
1492             'COMMA' => 25,
1493             'GREATER' => 26,
1494             'MINUS_DOT' => 28,
1495             'PLUS_DOT' => 30,
1496             'LESS_GREATER' => 31
1497             },
1498             DEFAULT => -19,
1499             GOTOS => {
1500             'simple_exp' => 27,
1501             'actual_args' => 29
1502             }
1503             },
1504             { #State 96
1505             ACTIONS => {
1506             'BOOL' => 2,
1507             'MINUS' => 3,
1508             'INT' => 5,
1509             'LPAREN' => 6,
1510             'ARRAY_CREATE' => 4,
1511             'NOT' => 8,
1512             'LET' => 7,
1513             'IDENT' => 10,
1514             'MINUS_DOT' => 12,
1515             'IF' => 13,
1516             'FLOAT' => 14
1517             },
1518             GOTOS => {
1519             'exp' => 98,
1520             'simple_exp' => 11,
1521             'elems' => 9
1522             }
1523             },
1524             { #State 97
1525             ACTIONS => {
1526             'GREATER_EQUAL' => 16,
1527             'BOOL' => 2,
1528             'MINUS' => 17,
1529             'SLASH_DOT' => 18,
1530             'LPAREN' => 6,
1531             'PLUS' => 19,
1532             'IDENT' => 10,
1533             'LESS' => 20,
1534             'AST_DOT' => 21,
1535             'EQUAL' => 22,
1536             'FLOAT' => 14,
1537             'LESS_EQUAL' => 24,
1538             'INT' => 5,
1539             'COMMA' => 25,
1540             'GREATER' => 26,
1541             'MINUS_DOT' => 28,
1542             'PLUS_DOT' => 30,
1543             'LESS_GREATER' => 31
1544             },
1545             DEFAULT => -30,
1546             GOTOS => {
1547             'simple_exp' => 27,
1548             'actual_args' => 29
1549             }
1550             },
1551             { #State 98
1552             ACTIONS => {
1553             'GREATER_EQUAL' => 16,
1554             'BOOL' => 2,
1555             'MINUS' => 17,
1556             'SLASH_DOT' => 18,
1557             'LPAREN' => 6,
1558             'PLUS' => 19,
1559             'IDENT' => 10,
1560             'LESS' => 20,
1561             'AST_DOT' => 21,
1562             'EQUAL' => 22,
1563             'FLOAT' => 14,
1564             'SEMICOLON' => 23,
1565             'LESS_EQUAL' => 24,
1566             'INT' => 5,
1567             'COMMA' => 25,
1568             'GREATER' => 26,
1569             'MINUS_DOT' => 28,
1570             'PLUS_DOT' => 30,
1571             'LESS_GREATER' => 31
1572             },
1573             DEFAULT => -29,
1574             GOTOS => {
1575             'simple_exp' => 27,
1576             'actual_args' => 29
1577             }
1578             }
1579             ],
1580             yyrules =>
1581             [
1582             [ #Rule 0
1583             '$start', 2, undef
1584             ],
1585             [ #Rule 1
1586             'simple_exp', 3,
1587 0     0   0 sub { $_[2] }
1588             ],
1589             [ #Rule 2
1590             'simple_exp', 2,
1591 0     0   0 sub { Node_Unit() }
1592             ],
1593             [ #Rule 3
1594             'simple_exp', 1,
1595 0     0   0 sub { Node_Bool($_[1]) }
1596             ],
1597             [ #Rule 4
1598             'simple_exp', 1,
1599 0     0   0 sub { Node_Int($_[1]) }
1600             ],
1601             [ #Rule 5
1602             'simple_exp', 1,
1603 0     0   0 sub { Node_Float($_[1]) }
1604             ],
1605             [ #Rule 6
1606             'simple_exp', 1,
1607 0     0   0 sub { Node_Var($_[1]) }
1608             ],
1609             [ #Rule 7
1610             'simple_exp', 5,
1611 0     0   0 sub { Node_Get($_[1], $_[4]) }
1612             ],
1613             [ #Rule 8
1614             'exp', 1,
1615 0     0   0 sub { $_[1] }
1616             ],
1617             [ #Rule 9
1618             'exp', 2,
1619 0     0   0 sub { Node_Not($_[2]) }
1620             ],
1621             [ #Rule 10
1622             'exp', 2,
1623             sub {
1624 0     0   0 my $node = $_[2];
1625 0 0       0 if ($node->kind eq 'Float') {
1626 0         0 $node->children->[0] = '-' . $node->children->[0];
1627 0         0 return $node;
1628             } else {
1629 0         0 return Node_Neg($node);
1630             }
1631             }
1632             ],
1633             [ #Rule 11
1634             'exp', 3,
1635 0     0   0 sub { Node_Add($_[1], $_[3]) }
1636             ],
1637             [ #Rule 12
1638             'exp', 3,
1639 0     0   0 sub { Node_Sub( $_[1], $_[3]) }
1640             ],
1641             [ #Rule 13
1642             'exp', 3,
1643 0     0   0 sub { Node_Eq($_[1], $_[3]) }
1644             ],
1645             [ #Rule 14
1646             'exp', 3,
1647 0     0   0 sub { Node_Not(Node_Eq($_[1], $_[3])) }
1648             ],
1649             [ #Rule 15
1650             'exp', 3,
1651 0     0   0 sub { Node_Not(Node_LE($_[3], $_[1])) }
1652             ],
1653             [ #Rule 16
1654             'exp', 3,
1655 0     0   0 sub { Node_Not(Node_LE($_[1], $_[3])) }
1656             ],
1657             [ #Rule 17
1658             'exp', 3,
1659 0     0   0 sub { Node_LE($_[1], $_[3]) }
1660             ],
1661             [ #Rule 18
1662             'exp', 3,
1663 0     0   0 sub { Node_LE($_[3], $_[1]) }
1664             ],
1665             [ #Rule 19
1666             'exp', 6,
1667 0     0   0 sub { Node_If( $_[2], $_[4], $_[6]) }
1668             ],
1669             [ #Rule 20
1670             'exp', 2,
1671 0     0   0 sub { Node_FNeg($_[2]) }
1672             ],
1673             [ #Rule 21
1674             'exp', 3,
1675 0     0   0 sub { Node_FAdd($_[1], $_[3]) }
1676             ],
1677             [ #Rule 22
1678             'exp', 3,
1679 0     0   0 sub { Node_FSub($_[1], $_[3]) }
1680             ],
1681             [ #Rule 23
1682             'exp', 3,
1683 0     0   0 sub { Node_FMul($_[1], $_[3]) }
1684             ],
1685             [ #Rule 24
1686             'exp', 3,
1687 0     0   0 sub { Node_FDiv($_[1], $_[3]) }
1688             ],
1689             [ #Rule 25
1690             'exp', 6,
1691 0     0   0 sub { Node_Let([$_[2], Type_Var()], $_[4], $_[6]) }
1692             ],
1693             [ #Rule 26
1694             'exp', 5,
1695 0     0   0 sub { Node_LetRec($_[3], $_[5]) }
1696             ],
1697             [ #Rule 27
1698             'exp', 2,
1699 0     0   0 sub { Node_App($_[1], $_[2]) }
1700             ],
1701             [ #Rule 28
1702             'exp', 1,
1703 0     0   0 sub { Node_Tuple($_[1]) }
1704             ],
1705             [ #Rule 29
1706             'exp', 8,
1707 0     0   0 sub { Node_LetTuple($_[3], $_[6], $_[8]) }
1708             ],
1709             [ #Rule 30
1710             'exp', 7,
1711 0     0   0 sub { Node_Put($_[1], $_[4], $_[7]) }
1712             ],
1713             [ #Rule 31
1714             'exp', 3,
1715 0     0   0 sub { Node_Let([create_temp_ident_name(Type_Unit()), Type_Unit()], $_[1], $_[3]) }
1716             ],
1717             [ #Rule 32
1718             'exp', 3,
1719 0     0   0 sub { Node_Array($_[2], $_[3]) }
1720             ],
1721             [ #Rule 33
1722             'fundef', 4,
1723 0     0   0 sub { +{'ident' => [$_[1], Type_Var()], 'args' => $_[2], 'body' => $_[4]} }
1724             ],
1725             [ #Rule 34
1726             'formal_args', 2,
1727 0     0   0 sub { my $args_ref = $_[2]; unshift(@$args_ref, [$_[1], Type_Var()]); $args_ref }
  0         0  
  0         0  
1728             ],
1729             [ #Rule 35
1730             'formal_args', 1,
1731 0     0   0 sub { [[$_[1], Type_Var()]] }
1732             ],
1733             [ #Rule 36
1734             'actual_args', 2,
1735 0     0   0 sub { my $args_ref = $_[1]; push(@$args_ref, $_[2]); $args_ref }
  0         0  
  0         0  
1736             ],
1737             [ #Rule 37
1738             'actual_args', 1,
1739 0     0   0 sub { [$_[1]] }
1740             ],
1741             [ #Rule 38
1742             'elems', 3,
1743 0     0   0 sub { my $args_ref = $_[1]; push(@$args_ref, $_[3]); $args_ref }
  0         0  
  0         0  
1744             ],
1745             [ #Rule 39
1746             'elems', 3,
1747 0     0   0 sub { [$_[1], $_[3]] }
1748             ],
1749             [ #Rule 40
1750             'pat', 3,
1751 0     0   0 sub { my $args_ref = $_[1]; push(@$args_ref, [$_[3], Type_Var()]); $args_ref }
  0         0  
  0         0  
1752             ],
1753             [ #Rule 41
1754             'pat', 3,
1755 0     0   0 sub { [[$_[1], Type_Var()], [$_[3], Type_Var()]] }
1756 2         945 ]
1757             ],
1758             @_);
1759 2         138 bless($self,$class);
1760             }
1761              
1762 0     0 0 0 sub error { croak "parse error!"; }
1763              
1764             sub next_token {
1765 1     1 0 6 my $self = shift;
1766 1         4 my $token = $self->{lexer}->next_token;
1767              
1768 0 0         if ($token->kind eq 'EOF') {
1769 0           return ('', undef);
1770             } else {
1771 0           return ($token->kind, $token->value);
1772             }
1773             }
1774              
1775             sub parse {
1776 0     0 0   my($self, $lexer) = @_;
1777 0           $self->{lexer} = $lexer;
1778 0           return $self->YYParse( yylex => \&next_token, yyerror => \&error );
1779             }
1780              
1781             1;