{
"name": "jslt",
"rules": {
"source_document": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "import_statement"
}
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "let_statement"
},
{
"type": "SYMBOL",
"name": "function_statement"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
}
]
},
"expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_or_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "pipe_operator"
},
{
"type": "SYMBOL",
"name": "_or_expression"
}
]
}
}
]
}
},
"_or_expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_and_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "or"
},
{
"type": "SYMBOL",
"name": "_or_expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"_and_expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_comparative_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "and"
},
{
"type": "SYMBOL",
"name": "_and_expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"_comparative_expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_additive_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comparator"
},
{
"type": "SYMBOL",
"name": "_additive_expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"comparator": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "equals"
},
{
"type": "SYMBOL",
"name": "unequals"
},
{
"type": "SYMBOL",
"name": "bigoreq"
},
{
"type": "SYMBOL",
"name": "bigger"
},
{
"type": "SYMBOL",
"name": "smaller"
},
{
"type": "SYMBOL",
"name": "smalloreq"
}
]
},
"pipe_operator": {
"type": "SYMBOL",
"name": "pipe"
},
"_additive_expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_multiplicative_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "additive_operator"
},
{
"type": "SYMBOL",
"name": "_multiplicative_expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"additive_operator": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "plus"
},
{
"type": "SYMBOL",
"name": "minus"
}
]
},
"_multiplicative_expression": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_base_expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_operator"
},
{
"type": "SYMBOL",
"name": "_base_expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"multiplicative_operator": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "star"
},
{
"type": "SYMBOL",
"name": "slash"
}
]
},
"_base_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 2,
"content": {
"type": "SYMBOL",
"name": "null"
}
},
{
"type": "SYMBOL",
"name": "integer"
},
{
"type": "SYMBOL",
"name": "decimal"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "true"
},
{
"type": "SYMBOL",
"name": "false"
},
{
"type": "SYMBOL",
"name": "chainable"
},
{
"type": "SYMBOL",
"name": "parenthesis"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "array"
},
{
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 2,
"content": {
"type": "SYMBOL",
"name": "object"
}
},
{
"type": "SYMBOL",
"name": "object_comprehension"
}
]
}
]
},
"chainable": {
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function_call"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "dot"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "string"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "chain_link"
},
{
"type": "BLANK"
}
]
}
}
]
}
},
"chain_link": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "dot_key"
},
{
"type": "SYMBOL",
"name": "array_slicing"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "chain_link"
},
{
"type": "BLANK"
}
]
}
]
}
},
"parenthesis": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
}
]
},
"dot_key": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "dot"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "string"
}
]
}
]
},
"array_slicing": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "lbracket"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "rbracket"
}
]
},
"array_element": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comma"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "array_element"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"array": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "lbracket"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "for"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "if"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "array_element"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "rbracket"
}
]
},
"object": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "lcurly"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "pair"
},
{
"type": "SYMBOL",
"name": "matcher"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "rcurly"
}
]
},
"matcher": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "star"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "matcher_minus"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"matcher_minus": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "minus"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "string"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comma"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "string"
}
]
}
]
}
}
]
},
"pair": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comma"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "pair"
},
{
"type": "SYMBOL",
"name": "matcher"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"object_comprehension": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "lcurly"
},
{
"type": "SYMBOL",
"name": "for"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "if"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "rcurly"
}
]
},
"if_statement": {
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "if"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "rparen"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else_branch"
},
{
"type": "BLANK"
}
]
}
]
}
},
"else_branch": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "else"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"function_call": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "pident"
}
]
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comma"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "rparen"
}
]
},
"let_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "let"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "ident"
}
},
{
"type": "SYMBOL",
"name": "assign"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
]
},
"function_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "def"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "lparen"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comma"
},
{
"type": "SYMBOL",
"name": "ident"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "rparen"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "let_statement"
}
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"import_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "import"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "as"
},
{
"type": "SYMBOL",
"name": "ident"
}
]
},
"single_line_comment": {
"type": "PATTERN",
"value": "\\/\\/.*(\\n|\\r|\\r\\n)?"
},
"null": {
"type": "STRING",
"value": "null"
},
"integer": {
"type": "PATTERN",
"value": "(-)?\\d+"
},
"decimal": {
"type": "PATTERN",
"value": "(-)?\\d+(\\.\\d+)|((\\.\\d+)?(e|E)(\\+|-)?\\d+)"
},
"string": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "STRING",
"value": "\""
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "SYMBOL",
"name": "string_content"
},
{
"type": "STRING",
"value": "\""
}
]
}
]
},
"string_content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "PATTERN",
"value": "[^\\\\\"\\n]+"
}
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
}
},
"escape_sequence": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "PATTERN",
"value": "(\\\"|\\\\|\\/|b|n|r|t|u)"
}
]
}
},
"lbracket": {
"type": "STRING",
"value": "["
},
"rbracket": {
"type": "STRING",
"value": "]"
},
"comma": {
"type": "STRING",
"value": ","
},
"colon": {
"type": "STRING",
"value": ":"
},
"lcurly": {
"type": "STRING",
"value": "{"
},
"rcurly": {
"type": "STRING",
"value": "}"
},
"true": {
"type": "STRING",
"value": "true"
},
"false": {
"type": "STRING",
"value": "false"
},
"or": {
"type": "STRING",
"value": "or"
},
"and": {
"type": "STRING",
"value": "and"
},
"dot": {
"type": "STRING",
"value": "."
},
"if": {
"type": "STRING",
"value": "if"
},
"else": {
"type": "STRING",
"value": "else"
},
"lparen": {
"type": "STRING",
"value": "("
},
"rparen": {
"type": "STRING",
"value": ")"
},
"let": {
"type": "STRING",
"value": "let"
},
"assign": {
"type": "STRING",
"value": "="
},
"equals": {
"type": "STRING",
"value": "=="
},
"unequals": {
"type": "STRING",
"value": "!="
},
"bigoreq": {
"type": "STRING",
"value": ">="
},
"bigger": {
"type": "STRING",
"value": ">"
},
"smaller": {
"type": "STRING",
"value": "<"
},
"smalloreq": {
"type": "STRING",
"value": "<="
},
"plus": {
"type": "STRING",
"value": "+"
},
"minus": {
"type": "STRING",
"value": "-"
},
"star": {
"type": "STRING",
"value": "*"
},
"slash": {
"type": "STRING",
"value": "/"
},
"pipe": {
"type": "STRING",
"value": "|"
},
"for": {
"type": "STRING",
"value": "for"
},
"def": {
"type": "STRING",
"value": "def"
},
"import": {
"type": "STRING",
"value": "import"
},
"as": {
"type": "STRING",
"value": "as"
},
"ident": {
"type": "PATTERN",
"value": "[A-Za-z0-9_-]+"
},
"pident": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "colon"
},
{
"type": "SYMBOL",
"name": "ident"
}
]
},
"variable": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "SYMBOL",
"name": "ident"
}
]
}
},
"extras": [
{
"type": "STRING",
"value": " "
},
{
"type": "STRING",
"value": "\t"
},
{
"type": "STRING",
"value": "\n"
},
{
"type": "STRING",
"value": "\r"
},
{
"type": "STRING",
"value": "\f"
},
{
"type": "SYMBOL",
"name": "single_line_comment"
},
{
"type": "PATTERN",
"value": ".*\\r?\\n"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}