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