{ "name": "hcl", "rules": { "config_file": { "type": "SYMBOL", "name": "body" }, "body": { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attribute" }, { "type": "SYMBOL", "name": "block" } ] } ] } }, "attribute": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, "block": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string_lit" }, { "type": "SYMBOL", "name": "identifier" } ] } }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "body" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "identifier": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "\\p{L}" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "\\p{L}" }, { "type": "PATTERN", "value": "[0-9]" }, { "type": "PATTERN", "value": "\\p{Pc}" } ] } } ] } }, "expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expr_term" } ] }, "expr_term": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "literal_value" }, { "type": "SYMBOL", "name": "collection_value" }, { "type": "SYMBOL", "name": "variable_expr" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ")" } ] } ] }, "literal_value": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "numeric_lit" }, { "type": "SYMBOL", "name": "string_lit" }, { "type": "SYMBOL", "name": "bool_lit" }, { "type": "SYMBOL", "name": "null_lit" } ] }, "numeric_lit": { "type": "PATTERN", "value": "[0-9]+(\\.[0-9]+([eE][-+]?[0-9]+)?)?" }, "string_lit": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^\\\\\"\\n]" }, { "type": "PATTERN", "value": "\\\\(.|\\n)" } ] } }, { "type": "STRING", "value": "\"" } ] }, "bool_lit": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "true" }, { "type": "STRING", "value": "false" } ] }, "null_lit": { "type": "STRING", "value": "null" }, "collection_value": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tuple" }, { "type": "SYMBOL", "name": "object" } ] }, "tuple": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "object": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "object_elem" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "object_elem" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "object_elem": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": ":" } ] }, { "type": "SYMBOL", "name": "expression" } ] }, "variable_expr": { "type": "SYMBOL", "name": "identifier" }, "comment": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "#" }, { "type": "PATTERN", "value": ".*" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "//" }, { "type": "PATTERN", "value": ".*" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "/*" }, { "type": "PATTERN", "value": "[^*]*\\*+([^/*][^*]*\\*+)*" }, { "type": "STRING", "value": "/" } ] } ] } } }, "extras": [ { "type": "SYMBOL", "name": "comment" }, { "type": "PATTERN", "value": "\\s" } ], "conflicts": [ [ "body" ], [ "object_elem", "variable_expr" ] ], "precedences": [], "externals": [], "inline": [], "supertypes": [] }