tree-sitter-paradox
Version:
Paradox grammar for tree-sitter
599 lines • 12 kB
JSON
{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "paradox",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "FIELD",
"name": "top_level_statement",
"content": {
"type": "SYMBOL",
"name": "statement"
}
}
},
"assignment": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "key",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "variable_embedded_identifier"
},
{
"type": "SYMBOL",
"name": "template_string"
},
{
"type": "SYMBOL",
"name": "string"
}
]
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "simple_value"
},
{
"type": "SYMBOL",
"name": "array"
},
{
"type": "SYMBOL",
"name": "map"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "variable_embedded_identifier"
}
]
}
}
]
},
"map": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "macro_map"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "condition_statement"
},
{
"type": "SYMBOL",
"name": "logical_statement"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "variable_embedded_identifier"
},
{
"type": "SYMBOL",
"name": "simple_value"
}
]
},
"array": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "simple_value"
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "variable_embedded_identifier"
}
]
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"simple_value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "boolean"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"condition_statement": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
},
{
"type": "STRING",
"value": "limit"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
},
{
"type": "STRING",
"value": "trigger"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
},
{
"type": "STRING",
"value": "potential"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
}
]
},
"logical_statement": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "AND"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "OR"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "NOT"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "map"
}
]
}
]
},
"macro_map": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "[["
},
{
"type": "FIELD",
"name": "key",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "]"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"template_string": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "PATTERN",
"value": "[^\"#\\\\]*"
},
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": "[0-9]+"
},
{
"type": "PATTERN",
"value": "[^\"\\\\]*"
},
{
"type": "STRING",
"value": "\""
}
]
}
},
"string": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\"\\\\]"
},
{
"type": "PATTERN",
"value": "\\\\."
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
}
},
"number": {
"type": "PATTERN",
"value": "-?(?:\\d+\\.\\d+|\\d+|\\.\\d+)(?:[eE][+-]?\\d+)?"
},
"boolean": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "yes"
},
{
"type": "STRING",
"value": "no"
},
{
"type": "STRING",
"value": "true"
},
{
"type": "STRING",
"value": "false"
}
]
},
"variable": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "$"
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[^\\s\"={}\\[\\]#$]+"
},
"variable_embedded_identifier": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "SYMBOL",
"name": "variable"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [
[
"map",
"array"
],
[
"assignment",
"variable_embedded_identifier"
],
[
"simple_value",
"variable_embedded_identifier"
],
[
"variable_embedded_identifier"
],
[
"assignment",
"statement"
],
[
"variable_embedded_identifier",
"statement"
],
[
"array",
"statement"
],
[
"array",
"statement",
"variable_embedded_identifier"
],
[
"assignment",
"simple_value"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}