{ "name": "perga", "rules": { "program": { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "definition" }, { "type": "SYMBOL", "name": "preprocess" }, { "type": "SYMBOL", "name": "axiom" } ] } }, "identifier": { "type": "PATTERN", "value": "[a-zA-Z_]\\w*" }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "--" }, { "type": "PATTERN", "value": ".*" } ] } }, "param_block": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "param", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "identifier" } } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "expr" } }, { "type": "STRING", "value": ")" } ] }, "star": { "type": "STRING", "value": "*" }, "square": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "□" }, { "type": "STRING", "value": "[]" } ] }, "labs": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "λ" }, { "type": "STRING", "value": "fun" } ] }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "param_block" } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=>" }, { "type": "STRING", "value": "⇒" } ] }, { "type": "SYMBOL", "name": "expr" } ] }, "pabs": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "∏" }, { "type": "STRING", "value": "forall" } ] }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "param_block" } }, { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expr" } ] }, "term": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "star" }, { "type": "SYMBOL", "name": "square" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "expr" }, { "type": "STRING", "value": ")" } ] } ] }, "binding": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "param_block" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "ascription" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":=" }, { "type": "SYMBOL", "name": "expr" }, { "type": "STRING", "value": ")" } ] }, "let": { "type": "SEQ", "members": [ { "type": "STRING", "value": "let" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "binding" } }, { "type": "STRING", "value": "in" }, { "type": "SYMBOL", "name": "expr" }, { "type": "STRING", "value": "end" } ] }, "app": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "term" } }, "axiom": { "type": "SEQ", "members": [ { "type": "STRING", "value": "axiom" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "param_block" } }, { "type": "SYMBOL", "name": "ascription" }, { "type": "STRING", "value": ";" } ] }, "arrow": { "type": "PREC_LEFT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "app_term" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "->" }, { "type": "STRING", "value": "→" } ] }, { "type": "SYMBOL", "name": "expr" } ] } }, "app_term": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "labs" }, { "type": "SYMBOL", "name": "pabs" }, { "type": "SYMBOL", "name": "let" }, { "type": "SYMBOL", "name": "app" } ] }, "expr": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "app_term" }, { "type": "SYMBOL", "name": "arrow" } ] }, "ascription": { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "expr" } } ] }, "definition": { "type": "SEQ", "members": [ { "type": "STRING", "value": "def" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "param_block" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "ascription" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":=" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expr" } ] }, { "type": "STRING", "value": ";" } ] }, "preprocess": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "command" }, { "type": "SYMBOL", "name": "post_command" } ] }, "post_command": { "type": "PATTERN", "value": ".+" }, "command": { "type": "STRING", "value": "@include" } }, "extras": [ { "type": "SYMBOL", "name": "comment" }, { "type": "PATTERN", "value": "\\s" } ], "conflicts": [], "precedences": [], "externals": [], "inline": [], "supertypes": [] }