UNPKG

49.7 kBJavaScriptView Raw
1module.exports = (function(){
2 /*
3 * Generated by PEG.js 0.7.0.
4 *
5 * http://pegjs.majda.cz/
6 */
7
8 function quote(s) {
9 /*
10 * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
11 * string literal except for the closing quote character, backslash,
12 * carriage return, line separator, paragraph separator, and line feed.
13 * Any character may appear in the form of an escape sequence.
14 *
15 * For portability, we also escape escape all control and non-ASCII
16 * characters. Note that "\0" and "\v" escape sequences are not used
17 * because JSHint does not like the first and IE the second.
18 */
19 return '"' + s
20 .replace(/\\/g, '\\\\') // backslash
21 .replace(/"/g, '\\"') // closing quote character
22 .replace(/\x08/g, '\\b') // backspace
23 .replace(/\t/g, '\\t') // horizontal tab
24 .replace(/\n/g, '\\n') // line feed
25 .replace(/\f/g, '\\f') // form feed
26 .replace(/\r/g, '\\r') // carriage return
27 .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)
28 + '"';
29 }
30
31 var result = {
32 /*
33 * Parses the input with a generated parser. If the parsing is successfull,
34 * returns a value explicitly or implicitly specified by the grammar from
35 * which the parser was generated (see |PEG.buildParser|). If the parsing is
36 * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
37 */
38 parse: function(input, startRule) {
39 var parseFunctions = {
40 "start": parse_start,
41 "line": parse_line,
42 "LineTerminator": parse_LineTerminator,
43 "comment": parse_comment,
44 "connection": parse_connection,
45 "bridge": parse_bridge,
46 "leftlet": parse_leftlet,
47 "iip": parse_iip,
48 "rightlet": parse_rightlet,
49 "node": parse_node,
50 "component": parse_component,
51 "compMeta": parse_compMeta,
52 "port": parse_port,
53 "anychar": parse_anychar,
54 "iipchar": parse_iipchar,
55 "_": parse__,
56 "__": parse___
57 };
58
59 if (startRule !== undefined) {
60 if (parseFunctions[startRule] === undefined) {
61 throw new Error("Invalid rule name: " + quote(startRule) + ".");
62 }
63 } else {
64 startRule = "start";
65 }
66
67 var pos = 0;
68 var reportFailures = 0;
69 var rightmostFailuresPos = 0;
70 var rightmostFailuresExpected = [];
71
72 function padLeft(input, padding, length) {
73 var result = input;
74
75 var padLength = length - input.length;
76 for (var i = 0; i < padLength; i++) {
77 result = padding + result;
78 }
79
80 return result;
81 }
82
83 function escape(ch) {
84 var charCode = ch.charCodeAt(0);
85 var escapeChar;
86 var length;
87
88 if (charCode <= 0xFF) {
89 escapeChar = 'x';
90 length = 2;
91 } else {
92 escapeChar = 'u';
93 length = 4;
94 }
95
96 return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
97 }
98
99 function matchFailed(failure) {
100 if (pos < rightmostFailuresPos) {
101 return;
102 }
103
104 if (pos > rightmostFailuresPos) {
105 rightmostFailuresPos = pos;
106 rightmostFailuresExpected = [];
107 }
108
109 rightmostFailuresExpected.push(failure);
110 }
111
112 function parse_start() {
113 var result0, result1;
114 var pos0;
115
116 pos0 = pos;
117 result0 = [];
118 result1 = parse_line();
119 while (result1 !== null) {
120 result0.push(result1);
121 result1 = parse_line();
122 }
123 if (result0 !== null) {
124 result0 = (function(offset) { return parser.getResult(); })(pos0);
125 }
126 if (result0 === null) {
127 pos = pos0;
128 }
129 return result0;
130 }
131
132 function parse_line() {
133 var result0, result1, result2, result3, result4, result5, result6, result7, result8;
134 var pos0, pos1;
135
136 pos0 = pos;
137 pos1 = pos;
138 result0 = parse__();
139 if (result0 !== null) {
140 if (input.substr(pos, 7) === "EXPORT=") {
141 result1 = "EXPORT=";
142 pos += 7;
143 } else {
144 result1 = null;
145 if (reportFailures === 0) {
146 matchFailed("\"EXPORT=\"");
147 }
148 }
149 if (result1 !== null) {
150 if (/^[A-Za-z.0-9_]/.test(input.charAt(pos))) {
151 result3 = input.charAt(pos);
152 pos++;
153 } else {
154 result3 = null;
155 if (reportFailures === 0) {
156 matchFailed("[A-Za-z.0-9_]");
157 }
158 }
159 if (result3 !== null) {
160 result2 = [];
161 while (result3 !== null) {
162 result2.push(result3);
163 if (/^[A-Za-z.0-9_]/.test(input.charAt(pos))) {
164 result3 = input.charAt(pos);
165 pos++;
166 } else {
167 result3 = null;
168 if (reportFailures === 0) {
169 matchFailed("[A-Za-z.0-9_]");
170 }
171 }
172 }
173 } else {
174 result2 = null;
175 }
176 if (result2 !== null) {
177 if (input.charCodeAt(pos) === 58) {
178 result3 = ":";
179 pos++;
180 } else {
181 result3 = null;
182 if (reportFailures === 0) {
183 matchFailed("\":\"");
184 }
185 }
186 if (result3 !== null) {
187 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
188 result5 = input.charAt(pos);
189 pos++;
190 } else {
191 result5 = null;
192 if (reportFailures === 0) {
193 matchFailed("[A-Z0-9_]");
194 }
195 }
196 if (result5 !== null) {
197 result4 = [];
198 while (result5 !== null) {
199 result4.push(result5);
200 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
201 result5 = input.charAt(pos);
202 pos++;
203 } else {
204 result5 = null;
205 if (reportFailures === 0) {
206 matchFailed("[A-Z0-9_]");
207 }
208 }
209 }
210 } else {
211 result4 = null;
212 }
213 if (result4 !== null) {
214 result5 = parse__();
215 if (result5 !== null) {
216 result6 = parse_LineTerminator();
217 result6 = result6 !== null ? result6 : "";
218 if (result6 !== null) {
219 result0 = [result0, result1, result2, result3, result4, result5, result6];
220 } else {
221 result0 = null;
222 pos = pos1;
223 }
224 } else {
225 result0 = null;
226 pos = pos1;
227 }
228 } else {
229 result0 = null;
230 pos = pos1;
231 }
232 } else {
233 result0 = null;
234 pos = pos1;
235 }
236 } else {
237 result0 = null;
238 pos = pos1;
239 }
240 } else {
241 result0 = null;
242 pos = pos1;
243 }
244 } else {
245 result0 = null;
246 pos = pos1;
247 }
248 if (result0 !== null) {
249 result0 = (function(offset, priv, pub) {return parser.registerExports(priv.join(""),pub.join(""))})(pos0, result0[2], result0[4]);
250 }
251 if (result0 === null) {
252 pos = pos0;
253 }
254 if (result0 === null) {
255 pos0 = pos;
256 pos1 = pos;
257 result0 = parse__();
258 if (result0 !== null) {
259 if (input.substr(pos, 7) === "INPORT=") {
260 result1 = "INPORT=";
261 pos += 7;
262 } else {
263 result1 = null;
264 if (reportFailures === 0) {
265 matchFailed("\"INPORT=\"");
266 }
267 }
268 if (result1 !== null) {
269 if (/^[A-Za-z0-9_]/.test(input.charAt(pos))) {
270 result3 = input.charAt(pos);
271 pos++;
272 } else {
273 result3 = null;
274 if (reportFailures === 0) {
275 matchFailed("[A-Za-z0-9_]");
276 }
277 }
278 if (result3 !== null) {
279 result2 = [];
280 while (result3 !== null) {
281 result2.push(result3);
282 if (/^[A-Za-z0-9_]/.test(input.charAt(pos))) {
283 result3 = input.charAt(pos);
284 pos++;
285 } else {
286 result3 = null;
287 if (reportFailures === 0) {
288 matchFailed("[A-Za-z0-9_]");
289 }
290 }
291 }
292 } else {
293 result2 = null;
294 }
295 if (result2 !== null) {
296 if (input.charCodeAt(pos) === 46) {
297 result3 = ".";
298 pos++;
299 } else {
300 result3 = null;
301 if (reportFailures === 0) {
302 matchFailed("\".\"");
303 }
304 }
305 if (result3 !== null) {
306 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
307 result5 = input.charAt(pos);
308 pos++;
309 } else {
310 result5 = null;
311 if (reportFailures === 0) {
312 matchFailed("[A-Z0-9_]");
313 }
314 }
315 if (result5 !== null) {
316 result4 = [];
317 while (result5 !== null) {
318 result4.push(result5);
319 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
320 result5 = input.charAt(pos);
321 pos++;
322 } else {
323 result5 = null;
324 if (reportFailures === 0) {
325 matchFailed("[A-Z0-9_]");
326 }
327 }
328 }
329 } else {
330 result4 = null;
331 }
332 if (result4 !== null) {
333 if (input.charCodeAt(pos) === 58) {
334 result5 = ":";
335 pos++;
336 } else {
337 result5 = null;
338 if (reportFailures === 0) {
339 matchFailed("\":\"");
340 }
341 }
342 if (result5 !== null) {
343 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
344 result7 = input.charAt(pos);
345 pos++;
346 } else {
347 result7 = null;
348 if (reportFailures === 0) {
349 matchFailed("[A-Z0-9_]");
350 }
351 }
352 if (result7 !== null) {
353 result6 = [];
354 while (result7 !== null) {
355 result6.push(result7);
356 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
357 result7 = input.charAt(pos);
358 pos++;
359 } else {
360 result7 = null;
361 if (reportFailures === 0) {
362 matchFailed("[A-Z0-9_]");
363 }
364 }
365 }
366 } else {
367 result6 = null;
368 }
369 if (result6 !== null) {
370 result7 = parse__();
371 if (result7 !== null) {
372 result8 = parse_LineTerminator();
373 result8 = result8 !== null ? result8 : "";
374 if (result8 !== null) {
375 result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8];
376 } else {
377 result0 = null;
378 pos = pos1;
379 }
380 } else {
381 result0 = null;
382 pos = pos1;
383 }
384 } else {
385 result0 = null;
386 pos = pos1;
387 }
388 } else {
389 result0 = null;
390 pos = pos1;
391 }
392 } else {
393 result0 = null;
394 pos = pos1;
395 }
396 } else {
397 result0 = null;
398 pos = pos1;
399 }
400 } else {
401 result0 = null;
402 pos = pos1;
403 }
404 } else {
405 result0 = null;
406 pos = pos1;
407 }
408 } else {
409 result0 = null;
410 pos = pos1;
411 }
412 if (result0 !== null) {
413 result0 = (function(offset, node, port, pub) {return parser.registerInports(node.join(""),port.join(""),pub.join(""))})(pos0, result0[2], result0[4], result0[6]);
414 }
415 if (result0 === null) {
416 pos = pos0;
417 }
418 if (result0 === null) {
419 pos0 = pos;
420 pos1 = pos;
421 result0 = parse__();
422 if (result0 !== null) {
423 if (input.substr(pos, 8) === "OUTPORT=") {
424 result1 = "OUTPORT=";
425 pos += 8;
426 } else {
427 result1 = null;
428 if (reportFailures === 0) {
429 matchFailed("\"OUTPORT=\"");
430 }
431 }
432 if (result1 !== null) {
433 if (/^[A-Za-z0-9_]/.test(input.charAt(pos))) {
434 result3 = input.charAt(pos);
435 pos++;
436 } else {
437 result3 = null;
438 if (reportFailures === 0) {
439 matchFailed("[A-Za-z0-9_]");
440 }
441 }
442 if (result3 !== null) {
443 result2 = [];
444 while (result3 !== null) {
445 result2.push(result3);
446 if (/^[A-Za-z0-9_]/.test(input.charAt(pos))) {
447 result3 = input.charAt(pos);
448 pos++;
449 } else {
450 result3 = null;
451 if (reportFailures === 0) {
452 matchFailed("[A-Za-z0-9_]");
453 }
454 }
455 }
456 } else {
457 result2 = null;
458 }
459 if (result2 !== null) {
460 if (input.charCodeAt(pos) === 46) {
461 result3 = ".";
462 pos++;
463 } else {
464 result3 = null;
465 if (reportFailures === 0) {
466 matchFailed("\".\"");
467 }
468 }
469 if (result3 !== null) {
470 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
471 result5 = input.charAt(pos);
472 pos++;
473 } else {
474 result5 = null;
475 if (reportFailures === 0) {
476 matchFailed("[A-Z0-9_]");
477 }
478 }
479 if (result5 !== null) {
480 result4 = [];
481 while (result5 !== null) {
482 result4.push(result5);
483 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
484 result5 = input.charAt(pos);
485 pos++;
486 } else {
487 result5 = null;
488 if (reportFailures === 0) {
489 matchFailed("[A-Z0-9_]");
490 }
491 }
492 }
493 } else {
494 result4 = null;
495 }
496 if (result4 !== null) {
497 if (input.charCodeAt(pos) === 58) {
498 result5 = ":";
499 pos++;
500 } else {
501 result5 = null;
502 if (reportFailures === 0) {
503 matchFailed("\":\"");
504 }
505 }
506 if (result5 !== null) {
507 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
508 result7 = input.charAt(pos);
509 pos++;
510 } else {
511 result7 = null;
512 if (reportFailures === 0) {
513 matchFailed("[A-Z0-9_]");
514 }
515 }
516 if (result7 !== null) {
517 result6 = [];
518 while (result7 !== null) {
519 result6.push(result7);
520 if (/^[A-Z0-9_]/.test(input.charAt(pos))) {
521 result7 = input.charAt(pos);
522 pos++;
523 } else {
524 result7 = null;
525 if (reportFailures === 0) {
526 matchFailed("[A-Z0-9_]");
527 }
528 }
529 }
530 } else {
531 result6 = null;
532 }
533 if (result6 !== null) {
534 result7 = parse__();
535 if (result7 !== null) {
536 result8 = parse_LineTerminator();
537 result8 = result8 !== null ? result8 : "";
538 if (result8 !== null) {
539 result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8];
540 } else {
541 result0 = null;
542 pos = pos1;
543 }
544 } else {
545 result0 = null;
546 pos = pos1;
547 }
548 } else {
549 result0 = null;
550 pos = pos1;
551 }
552 } else {
553 result0 = null;
554 pos = pos1;
555 }
556 } else {
557 result0 = null;
558 pos = pos1;
559 }
560 } else {
561 result0 = null;
562 pos = pos1;
563 }
564 } else {
565 result0 = null;
566 pos = pos1;
567 }
568 } else {
569 result0 = null;
570 pos = pos1;
571 }
572 } else {
573 result0 = null;
574 pos = pos1;
575 }
576 if (result0 !== null) {
577 result0 = (function(offset, node, port, pub) {return parser.registerOutports(node.join(""),port.join(""),pub.join(""))})(pos0, result0[2], result0[4], result0[6]);
578 }
579 if (result0 === null) {
580 pos = pos0;
581 }
582 if (result0 === null) {
583 pos0 = pos;
584 result0 = parse_comment();
585 if (result0 !== null) {
586 if (/^[\n\r\u2028\u2029]/.test(input.charAt(pos))) {
587 result1 = input.charAt(pos);
588 pos++;
589 } else {
590 result1 = null;
591 if (reportFailures === 0) {
592 matchFailed("[\\n\\r\\u2028\\u2029]");
593 }
594 }
595 result1 = result1 !== null ? result1 : "";
596 if (result1 !== null) {
597 result0 = [result0, result1];
598 } else {
599 result0 = null;
600 pos = pos0;
601 }
602 } else {
603 result0 = null;
604 pos = pos0;
605 }
606 if (result0 === null) {
607 pos0 = pos;
608 result0 = parse__();
609 if (result0 !== null) {
610 if (/^[\n\r\u2028\u2029]/.test(input.charAt(pos))) {
611 result1 = input.charAt(pos);
612 pos++;
613 } else {
614 result1 = null;
615 if (reportFailures === 0) {
616 matchFailed("[\\n\\r\\u2028\\u2029]");
617 }
618 }
619 if (result1 !== null) {
620 result0 = [result0, result1];
621 } else {
622 result0 = null;
623 pos = pos0;
624 }
625 } else {
626 result0 = null;
627 pos = pos0;
628 }
629 if (result0 === null) {
630 pos0 = pos;
631 pos1 = pos;
632 result0 = parse__();
633 if (result0 !== null) {
634 result1 = parse_connection();
635 if (result1 !== null) {
636 result2 = parse__();
637 if (result2 !== null) {
638 result3 = parse_LineTerminator();
639 result3 = result3 !== null ? result3 : "";
640 if (result3 !== null) {
641 result0 = [result0, result1, result2, result3];
642 } else {
643 result0 = null;
644 pos = pos1;
645 }
646 } else {
647 result0 = null;
648 pos = pos1;
649 }
650 } else {
651 result0 = null;
652 pos = pos1;
653 }
654 } else {
655 result0 = null;
656 pos = pos1;
657 }
658 if (result0 !== null) {
659 result0 = (function(offset, edges) {return parser.registerEdges(edges);})(pos0, result0[1]);
660 }
661 if (result0 === null) {
662 pos = pos0;
663 }
664 }
665 }
666 }
667 }
668 }
669 return result0;
670 }
671
672 function parse_LineTerminator() {
673 var result0, result1, result2, result3;
674 var pos0;
675
676 pos0 = pos;
677 result0 = parse__();
678 if (result0 !== null) {
679 if (input.charCodeAt(pos) === 44) {
680 result1 = ",";
681 pos++;
682 } else {
683 result1 = null;
684 if (reportFailures === 0) {
685 matchFailed("\",\"");
686 }
687 }
688 result1 = result1 !== null ? result1 : "";
689 if (result1 !== null) {
690 result2 = parse_comment();
691 result2 = result2 !== null ? result2 : "";
692 if (result2 !== null) {
693 if (/^[\n\r\u2028\u2029]/.test(input.charAt(pos))) {
694 result3 = input.charAt(pos);
695 pos++;
696 } else {
697 result3 = null;
698 if (reportFailures === 0) {
699 matchFailed("[\\n\\r\\u2028\\u2029]");
700 }
701 }
702 result3 = result3 !== null ? result3 : "";
703 if (result3 !== null) {
704 result0 = [result0, result1, result2, result3];
705 } else {
706 result0 = null;
707 pos = pos0;
708 }
709 } else {
710 result0 = null;
711 pos = pos0;
712 }
713 } else {
714 result0 = null;
715 pos = pos0;
716 }
717 } else {
718 result0 = null;
719 pos = pos0;
720 }
721 return result0;
722 }
723
724 function parse_comment() {
725 var result0, result1, result2, result3;
726 var pos0;
727
728 pos0 = pos;
729 result0 = parse__();
730 if (result0 !== null) {
731 if (input.charCodeAt(pos) === 35) {
732 result1 = "#";
733 pos++;
734 } else {
735 result1 = null;
736 if (reportFailures === 0) {
737 matchFailed("\"#\"");
738 }
739 }
740 if (result1 !== null) {
741 result2 = [];
742 result3 = parse_anychar();
743 while (result3 !== null) {
744 result2.push(result3);
745 result3 = parse_anychar();
746 }
747 if (result2 !== null) {
748 result0 = [result0, result1, result2];
749 } else {
750 result0 = null;
751 pos = pos0;
752 }
753 } else {
754 result0 = null;
755 pos = pos0;
756 }
757 } else {
758 result0 = null;
759 pos = pos0;
760 }
761 return result0;
762 }
763
764 function parse_connection() {
765 var result0, result1, result2, result3, result4;
766 var pos0, pos1;
767
768 pos0 = pos;
769 pos1 = pos;
770 result0 = parse_bridge();
771 if (result0 !== null) {
772 result1 = parse__();
773 if (result1 !== null) {
774 if (input.substr(pos, 2) === "->") {
775 result2 = "->";
776 pos += 2;
777 } else {
778 result2 = null;
779 if (reportFailures === 0) {
780 matchFailed("\"->\"");
781 }
782 }
783 if (result2 !== null) {
784 result3 = parse__();
785 if (result3 !== null) {
786 result4 = parse_connection();
787 if (result4 !== null) {
788 result0 = [result0, result1, result2, result3, result4];
789 } else {
790 result0 = null;
791 pos = pos1;
792 }
793 } else {
794 result0 = null;
795 pos = pos1;
796 }
797 } else {
798 result0 = null;
799 pos = pos1;
800 }
801 } else {
802 result0 = null;
803 pos = pos1;
804 }
805 } else {
806 result0 = null;
807 pos = pos1;
808 }
809 if (result0 !== null) {
810 result0 = (function(offset, x, y) { return [x,y]; })(pos0, result0[0], result0[4]);
811 }
812 if (result0 === null) {
813 pos = pos0;
814 }
815 if (result0 === null) {
816 result0 = parse_bridge();
817 }
818 return result0;
819 }
820
821 function parse_bridge() {
822 var result0, result1, result2, result3, result4;
823 var pos0, pos1;
824
825 pos0 = pos;
826 pos1 = pos;
827 result0 = parse_port();
828 if (result0 !== null) {
829 result1 = parse__();
830 if (result1 !== null) {
831 result2 = parse_node();
832 if (result2 !== null) {
833 result3 = parse__();
834 if (result3 !== null) {
835 result4 = parse_port();
836 if (result4 !== null) {
837 result0 = [result0, result1, result2, result3, result4];
838 } else {
839 result0 = null;
840 pos = pos1;
841 }
842 } else {
843 result0 = null;
844 pos = pos1;
845 }
846 } else {
847 result0 = null;
848 pos = pos1;
849 }
850 } else {
851 result0 = null;
852 pos = pos1;
853 }
854 } else {
855 result0 = null;
856 pos = pos1;
857 }
858 if (result0 !== null) {
859 result0 = (function(offset, x, proc, y) { return [{"tgt":{process:proc, port:x}},{"src":{process:proc, port:y}}]; })(pos0, result0[0], result0[2], result0[4]);
860 }
861 if (result0 === null) {
862 pos = pos0;
863 }
864 if (result0 === null) {
865 result0 = parse_iip();
866 if (result0 === null) {
867 result0 = parse_rightlet();
868 if (result0 === null) {
869 result0 = parse_leftlet();
870 }
871 }
872 }
873 return result0;
874 }
875
876 function parse_leftlet() {
877 var result0, result1, result2;
878 var pos0, pos1;
879
880 pos0 = pos;
881 pos1 = pos;
882 result0 = parse_node();
883 if (result0 !== null) {
884 result1 = parse__();
885 if (result1 !== null) {
886 result2 = parse_port();
887 if (result2 !== null) {
888 result0 = [result0, result1, result2];
889 } else {
890 result0 = null;
891 pos = pos1;
892 }
893 } else {
894 result0 = null;
895 pos = pos1;
896 }
897 } else {
898 result0 = null;
899 pos = pos1;
900 }
901 if (result0 !== null) {
902 result0 = (function(offset, proc, port) { return {"src":{process:proc, port:port}} })(pos0, result0[0], result0[2]);
903 }
904 if (result0 === null) {
905 pos = pos0;
906 }
907 return result0;
908 }
909
910 function parse_iip() {
911 var result0, result1, result2;
912 var pos0, pos1;
913
914 pos0 = pos;
915 pos1 = pos;
916 if (input.charCodeAt(pos) === 39) {
917 result0 = "'";
918 pos++;
919 } else {
920 result0 = null;
921 if (reportFailures === 0) {
922 matchFailed("\"'\"");
923 }
924 }
925 if (result0 !== null) {
926 result1 = [];
927 result2 = parse_iipchar();
928 while (result2 !== null) {
929 result1.push(result2);
930 result2 = parse_iipchar();
931 }
932 if (result1 !== null) {
933 if (input.charCodeAt(pos) === 39) {
934 result2 = "'";
935 pos++;
936 } else {
937 result2 = null;
938 if (reportFailures === 0) {
939 matchFailed("\"'\"");
940 }
941 }
942 if (result2 !== null) {
943 result0 = [result0, result1, result2];
944 } else {
945 result0 = null;
946 pos = pos1;
947 }
948 } else {
949 result0 = null;
950 pos = pos1;
951 }
952 } else {
953 result0 = null;
954 pos = pos1;
955 }
956 if (result0 !== null) {
957 result0 = (function(offset, iip) { return {"data":iip.join("")} })(pos0, result0[1]);
958 }
959 if (result0 === null) {
960 pos = pos0;
961 }
962 return result0;
963 }
964
965 function parse_rightlet() {
966 var result0, result1, result2;
967 var pos0, pos1;
968
969 pos0 = pos;
970 pos1 = pos;
971 result0 = parse_port();
972 if (result0 !== null) {
973 result1 = parse__();
974 if (result1 !== null) {
975 result2 = parse_node();
976 if (result2 !== null) {
977 result0 = [result0, result1, result2];
978 } else {
979 result0 = null;
980 pos = pos1;
981 }
982 } else {
983 result0 = null;
984 pos = pos1;
985 }
986 } else {
987 result0 = null;
988 pos = pos1;
989 }
990 if (result0 !== null) {
991 result0 = (function(offset, port, proc) { return {"tgt":{process:proc, port:port}} })(pos0, result0[0], result0[2]);
992 }
993 if (result0 === null) {
994 pos = pos0;
995 }
996 return result0;
997 }
998
999 function parse_node() {
1000 var result0, result1;
1001 var pos0, pos1;
1002
1003 pos0 = pos;
1004 pos1 = pos;
1005 if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) {
1006 result1 = input.charAt(pos);
1007 pos++;
1008 } else {
1009 result1 = null;
1010 if (reportFailures === 0) {
1011 matchFailed("[a-zA-Z0-9_]");
1012 }
1013 }
1014 if (result1 !== null) {
1015 result0 = [];
1016 while (result1 !== null) {
1017 result0.push(result1);
1018 if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) {
1019 result1 = input.charAt(pos);
1020 pos++;
1021 } else {
1022 result1 = null;
1023 if (reportFailures === 0) {
1024 matchFailed("[a-zA-Z0-9_]");
1025 }
1026 }
1027 }
1028 } else {
1029 result0 = null;
1030 }
1031 if (result0 !== null) {
1032 result1 = parse_component();
1033 result1 = result1 !== null ? result1 : "";
1034 if (result1 !== null) {
1035 result0 = [result0, result1];
1036 } else {
1037 result0 = null;
1038 pos = pos1;
1039 }
1040 } else {
1041 result0 = null;
1042 pos = pos1;
1043 }
1044 if (result0 !== null) {
1045 result0 = (function(offset, node, comp) { if(comp){parser.addNode(node.join(""),comp);}; return node.join("")})(pos0, result0[0], result0[1]);
1046 }
1047 if (result0 === null) {
1048 pos = pos0;
1049 }
1050 return result0;
1051 }
1052
1053 function parse_component() {
1054 var result0, result1, result2, result3;
1055 var pos0, pos1;
1056
1057 pos0 = pos;
1058 pos1 = pos;
1059 if (input.charCodeAt(pos) === 40) {
1060 result0 = "(";
1061 pos++;
1062 } else {
1063 result0 = null;
1064 if (reportFailures === 0) {
1065 matchFailed("\"(\"");
1066 }
1067 }
1068 if (result0 !== null) {
1069 if (/^[a-zA-Z\/\-0-9_]/.test(input.charAt(pos))) {
1070 result2 = input.charAt(pos);
1071 pos++;
1072 } else {
1073 result2 = null;
1074 if (reportFailures === 0) {
1075 matchFailed("[a-zA-Z\\/\\-0-9_]");
1076 }
1077 }
1078 if (result2 !== null) {
1079 result1 = [];
1080 while (result2 !== null) {
1081 result1.push(result2);
1082 if (/^[a-zA-Z\/\-0-9_]/.test(input.charAt(pos))) {
1083 result2 = input.charAt(pos);
1084 pos++;
1085 } else {
1086 result2 = null;
1087 if (reportFailures === 0) {
1088 matchFailed("[a-zA-Z\\/\\-0-9_]");
1089 }
1090 }
1091 }
1092 } else {
1093 result1 = null;
1094 }
1095 result1 = result1 !== null ? result1 : "";
1096 if (result1 !== null) {
1097 result2 = parse_compMeta();
1098 result2 = result2 !== null ? result2 : "";
1099 if (result2 !== null) {
1100 if (input.charCodeAt(pos) === 41) {
1101 result3 = ")";
1102 pos++;
1103 } else {
1104 result3 = null;
1105 if (reportFailures === 0) {
1106 matchFailed("\")\"");
1107 }
1108 }
1109 if (result3 !== null) {
1110 result0 = [result0, result1, result2, result3];
1111 } else {
1112 result0 = null;
1113 pos = pos1;
1114 }
1115 } else {
1116 result0 = null;
1117 pos = pos1;
1118 }
1119 } else {
1120 result0 = null;
1121 pos = pos1;
1122 }
1123 } else {
1124 result0 = null;
1125 pos = pos1;
1126 }
1127 if (result0 !== null) {
1128 result0 = (function(offset, comp, meta) { var o = {}; comp ? o.comp = comp.join("") : o.comp = ''; meta ? o.meta = meta.join("").split(',') : null; return o; })(pos0, result0[1], result0[2]);
1129 }
1130 if (result0 === null) {
1131 pos = pos0;
1132 }
1133 return result0;
1134 }
1135
1136 function parse_compMeta() {
1137 var result0, result1, result2;
1138 var pos0, pos1;
1139
1140 pos0 = pos;
1141 pos1 = pos;
1142 if (input.charCodeAt(pos) === 58) {
1143 result0 = ":";
1144 pos++;
1145 } else {
1146 result0 = null;
1147 if (reportFailures === 0) {
1148 matchFailed("\":\"");
1149 }
1150 }
1151 if (result0 !== null) {
1152 if (/^[a-zA-Z\/=_,0-9]/.test(input.charAt(pos))) {
1153 result2 = input.charAt(pos);
1154 pos++;
1155 } else {
1156 result2 = null;
1157 if (reportFailures === 0) {
1158 matchFailed("[a-zA-Z\\/=_,0-9]");
1159 }
1160 }
1161 if (result2 !== null) {
1162 result1 = [];
1163 while (result2 !== null) {
1164 result1.push(result2);
1165 if (/^[a-zA-Z\/=_,0-9]/.test(input.charAt(pos))) {
1166 result2 = input.charAt(pos);
1167 pos++;
1168 } else {
1169 result2 = null;
1170 if (reportFailures === 0) {
1171 matchFailed("[a-zA-Z\\/=_,0-9]");
1172 }
1173 }
1174 }
1175 } else {
1176 result1 = null;
1177 }
1178 if (result1 !== null) {
1179 result0 = [result0, result1];
1180 } else {
1181 result0 = null;
1182 pos = pos1;
1183 }
1184 } else {
1185 result0 = null;
1186 pos = pos1;
1187 }
1188 if (result0 !== null) {
1189 result0 = (function(offset, meta) {return meta})(pos0, result0[1]);
1190 }
1191 if (result0 === null) {
1192 pos = pos0;
1193 }
1194 return result0;
1195 }
1196
1197 function parse_port() {
1198 var result0, result1;
1199 var pos0, pos1;
1200
1201 pos0 = pos;
1202 pos1 = pos;
1203 if (/^[A-Z.0-9_]/.test(input.charAt(pos))) {
1204 result1 = input.charAt(pos);
1205 pos++;
1206 } else {
1207 result1 = null;
1208 if (reportFailures === 0) {
1209 matchFailed("[A-Z.0-9_]");
1210 }
1211 }
1212 if (result1 !== null) {
1213 result0 = [];
1214 while (result1 !== null) {
1215 result0.push(result1);
1216 if (/^[A-Z.0-9_]/.test(input.charAt(pos))) {
1217 result1 = input.charAt(pos);
1218 pos++;
1219 } else {
1220 result1 = null;
1221 if (reportFailures === 0) {
1222 matchFailed("[A-Z.0-9_]");
1223 }
1224 }
1225 }
1226 } else {
1227 result0 = null;
1228 }
1229 if (result0 !== null) {
1230 result1 = parse___();
1231 if (result1 !== null) {
1232 result0 = [result0, result1];
1233 } else {
1234 result0 = null;
1235 pos = pos1;
1236 }
1237 } else {
1238 result0 = null;
1239 pos = pos1;
1240 }
1241 if (result0 !== null) {
1242 result0 = (function(offset, portname) {return portname.join("").toLowerCase()})(pos0, result0[0]);
1243 }
1244 if (result0 === null) {
1245 pos = pos0;
1246 }
1247 return result0;
1248 }
1249
1250 function parse_anychar() {
1251 var result0;
1252
1253 if (/^[^\n\r\u2028\u2029]/.test(input.charAt(pos))) {
1254 result0 = input.charAt(pos);
1255 pos++;
1256 } else {
1257 result0 = null;
1258 if (reportFailures === 0) {
1259 matchFailed("[^\\n\\r\\u2028\\u2029]");
1260 }
1261 }
1262 return result0;
1263 }
1264
1265 function parse_iipchar() {
1266 var result0, result1;
1267 var pos0, pos1;
1268
1269 pos0 = pos;
1270 pos1 = pos;
1271 if (/^[\\]/.test(input.charAt(pos))) {
1272 result0 = input.charAt(pos);
1273 pos++;
1274 } else {
1275 result0 = null;
1276 if (reportFailures === 0) {
1277 matchFailed("[\\\\]");
1278 }
1279 }
1280 if (result0 !== null) {
1281 if (/^[']/.test(input.charAt(pos))) {
1282 result1 = input.charAt(pos);
1283 pos++;
1284 } else {
1285 result1 = null;
1286 if (reportFailures === 0) {
1287 matchFailed("[']");
1288 }
1289 }
1290 if (result1 !== null) {
1291 result0 = [result0, result1];
1292 } else {
1293 result0 = null;
1294 pos = pos1;
1295 }
1296 } else {
1297 result0 = null;
1298 pos = pos1;
1299 }
1300 if (result0 !== null) {
1301 result0 = (function(offset) { return "'"; })(pos0);
1302 }
1303 if (result0 === null) {
1304 pos = pos0;
1305 }
1306 if (result0 === null) {
1307 if (/^[^']/.test(input.charAt(pos))) {
1308 result0 = input.charAt(pos);
1309 pos++;
1310 } else {
1311 result0 = null;
1312 if (reportFailures === 0) {
1313 matchFailed("[^']");
1314 }
1315 }
1316 }
1317 return result0;
1318 }
1319
1320 function parse__() {
1321 var result0, result1;
1322
1323 result0 = [];
1324 if (input.charCodeAt(pos) === 32) {
1325 result1 = " ";
1326 pos++;
1327 } else {
1328 result1 = null;
1329 if (reportFailures === 0) {
1330 matchFailed("\" \"");
1331 }
1332 }
1333 while (result1 !== null) {
1334 result0.push(result1);
1335 if (input.charCodeAt(pos) === 32) {
1336 result1 = " ";
1337 pos++;
1338 } else {
1339 result1 = null;
1340 if (reportFailures === 0) {
1341 matchFailed("\" \"");
1342 }
1343 }
1344 }
1345 result0 = result0 !== null ? result0 : "";
1346 return result0;
1347 }
1348
1349 function parse___() {
1350 var result0, result1;
1351
1352 if (input.charCodeAt(pos) === 32) {
1353 result1 = " ";
1354 pos++;
1355 } else {
1356 result1 = null;
1357 if (reportFailures === 0) {
1358 matchFailed("\" \"");
1359 }
1360 }
1361 if (result1 !== null) {
1362 result0 = [];
1363 while (result1 !== null) {
1364 result0.push(result1);
1365 if (input.charCodeAt(pos) === 32) {
1366 result1 = " ";
1367 pos++;
1368 } else {
1369 result1 = null;
1370 if (reportFailures === 0) {
1371 matchFailed("\" \"");
1372 }
1373 }
1374 }
1375 } else {
1376 result0 = null;
1377 }
1378 return result0;
1379 }
1380
1381
1382 function cleanupExpected(expected) {
1383 expected.sort();
1384
1385 var lastExpected = null;
1386 var cleanExpected = [];
1387 for (var i = 0; i < expected.length; i++) {
1388 if (expected[i] !== lastExpected) {
1389 cleanExpected.push(expected[i]);
1390 lastExpected = expected[i];
1391 }
1392 }
1393 return cleanExpected;
1394 }
1395
1396 function computeErrorPosition() {
1397 /*
1398 * The first idea was to use |String.split| to break the input up to the
1399 * error position along newlines and derive the line and column from
1400 * there. However IE's |split| implementation is so broken that it was
1401 * enough to prevent it.
1402 */
1403
1404 var line = 1;
1405 var column = 1;
1406 var seenCR = false;
1407
1408 for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) {
1409 var ch = input.charAt(i);
1410 if (ch === "\n") {
1411 if (!seenCR) { line++; }
1412 column = 1;
1413 seenCR = false;
1414 } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
1415 line++;
1416 column = 1;
1417 seenCR = true;
1418 } else {
1419 column++;
1420 seenCR = false;
1421 }
1422 }
1423
1424 return { line: line, column: column };
1425 }
1426
1427
1428 var parser, edges, nodes;
1429
1430 parser = this;
1431 delete parser.exports;
1432 delete parser.inports;
1433 delete parser.outports;
1434
1435 edges = parser.edges = [];
1436
1437 nodes = {};
1438
1439 parser.addNode = function (nodeName, comp) {
1440 if (!nodes[nodeName]) {
1441 nodes[nodeName] = {}
1442 }
1443 if (!!comp.comp) {
1444 nodes[nodeName].component = comp.comp;
1445 }
1446 if (!!comp.meta) {
1447 var metadata = {};
1448 for (var i = 0; i < comp.meta.length; i++) {
1449 var item = comp.meta[i].split('=');
1450 if (item.length === 1) {
1451 item = ['routes', item[0]];
1452 }
1453 metadata[item[0]] = item[1];
1454 }
1455 nodes[nodeName].metadata=metadata;
1456 }
1457
1458 }
1459
1460 parser.getResult = function () {
1461 return {processes:nodes, connections:parser.processEdges(), exports:parser.exports, inports: parser.inports, outports: parser.outports};
1462 }
1463
1464 var flatten = function (array, isShallow) {
1465 var index = -1,
1466 length = array ? array.length : 0,
1467 result = [];
1468
1469 while (++index < length) {
1470 var value = array[index];
1471
1472 if (value instanceof Array) {
1473 Array.prototype.push.apply(result, isShallow ? value : flatten(value));
1474 }
1475 else {
1476 result.push(value);
1477 }
1478 }
1479 return result;
1480 }
1481
1482 parser.registerExports = function (priv, pub) {
1483 if (!parser.exports) {
1484 parser.exports = [];
1485 }
1486 parser.exports.push({private:priv.toLowerCase(), public:pub.toLowerCase()})
1487 }
1488 parser.registerInports = function (node, port, pub) {
1489 if (!parser.inports) {
1490 parser.inports = {};
1491 }
1492 parser.inports[pub.toLowerCase()] = {process:node, port:port.toLowerCase()}
1493 }
1494 parser.registerOutports = function (node, port, pub) {
1495 if (!parser.outports) {
1496 parser.outports = {};
1497 }
1498 parser.outports[pub.toLowerCase()] = {process:node, port:port.toLowerCase()}
1499 }
1500
1501 parser.registerEdges = function (edges) {
1502
1503 edges.forEach(function (o, i) {
1504 parser.edges.push(o);
1505 });
1506 }
1507
1508 parser.processEdges = function () {
1509 var flats, grouped;
1510 flats = flatten(parser.edges);
1511 grouped = [];
1512 var current = {};
1513 flats.forEach(function (o, i) {
1514 if (i % 2 !== 0) {
1515 var pair = grouped[grouped.length - 1];
1516 pair.tgt = o.tgt;
1517 return;
1518 }
1519 grouped.push(o);
1520 });
1521 return grouped;
1522 }
1523
1524
1525 var result = parseFunctions[startRule]();
1526
1527 /*
1528 * The parser is now in one of the following three states:
1529 *
1530 * 1. The parser successfully parsed the whole input.
1531 *
1532 * - |result !== null|
1533 * - |pos === input.length|
1534 * - |rightmostFailuresExpected| may or may not contain something
1535 *
1536 * 2. The parser successfully parsed only a part of the input.
1537 *
1538 * - |result !== null|
1539 * - |pos < input.length|
1540 * - |rightmostFailuresExpected| may or may not contain something
1541 *
1542 * 3. The parser did not successfully parse any part of the input.
1543 *
1544 * - |result === null|
1545 * - |pos === 0|
1546 * - |rightmostFailuresExpected| contains at least one failure
1547 *
1548 * All code following this comment (including called functions) must
1549 * handle these states.
1550 */
1551 if (result === null || pos !== input.length) {
1552 var offset = Math.max(pos, rightmostFailuresPos);
1553 var found = offset < input.length ? input.charAt(offset) : null;
1554 var errorPosition = computeErrorPosition();
1555
1556 throw new this.SyntaxError(
1557 cleanupExpected(rightmostFailuresExpected),
1558 found,
1559 offset,
1560 errorPosition.line,
1561 errorPosition.column
1562 );
1563 }
1564
1565 return result;
1566 },
1567
1568 /* Returns the parser source code. */
1569 toSource: function() { return this._source; }
1570 };
1571
1572 /* Thrown when a parser encounters a syntax error. */
1573
1574 result.SyntaxError = function(expected, found, offset, line, column) {
1575 function buildMessage(expected, found) {
1576 var expectedHumanized, foundHumanized;
1577
1578 switch (expected.length) {
1579 case 0:
1580 expectedHumanized = "end of input";
1581 break;
1582 case 1:
1583 expectedHumanized = expected[0];
1584 break;
1585 default:
1586 expectedHumanized = expected.slice(0, expected.length - 1).join(", ")
1587 + " or "
1588 + expected[expected.length - 1];
1589 }
1590
1591 foundHumanized = found ? quote(found) : "end of input";
1592
1593 return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";
1594 }
1595
1596 this.name = "SyntaxError";
1597 this.expected = expected;
1598 this.found = found;
1599 this.message = buildMessage(expected, found);
1600 this.offset = offset;
1601 this.line = line;
1602 this.column = column;
1603 };
1604
1605 result.SyntaxError.prototype = Error.prototype;
1606
1607 return result;
1608})();
\No newline at end of file