{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "casbin",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "section"
}
},
"section": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "request_section"
},
{
"type": "SYMBOL",
"name": "policy_section"
},
{
"type": "SYMBOL",
"name": "role_section"
},
{
"type": "SYMBOL",
"name": "policy_effect_section"
},
{
"type": "SYMBOL",
"name": "matchers_section"
}
]
},
"request_section": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "request_definition"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "ptype",
"content": {
"type": "SYMBOL",
"name": "request_ptype"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression_list"
}
}
]
}
}
]
},
"policy_section": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "policy_definition"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "ptype",
"content": {
"type": "SYMBOL",
"name": "policy_ptype"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression_list"
}
}
]
}
}
]
},
"role_section": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "role_definition"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "ptype",
"content": {
"type": "SYMBOL",
"name": "role_ptype"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression_list"
}
}
]
}
}
]
},
"policy_effect_section": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "policy_effect"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "ptype",
"content": {
"type": "SYMBOL",
"name": "policy_effect_ptype"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression_list"
}
}
]
}
}
]
},
"matchers_section": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "matchers"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "ptype",
"content": {
"type": "SYMBOL",
"name": "matchers_ptype"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "expression_list"
}
}
]
}
}
]
},
"ptype": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "request_ptype"
},
{
"type": "SYMBOL",
"name": "policy_ptype"
},
{
"type": "SYMBOL",
"name": "role_ptype"
},
{
"type": "SYMBOL",
"name": "policy_effect_ptype"
},
{
"type": "SYMBOL",
"name": "matchers_ptype"
}
]
},
"request_ptype": {
"type": "PATTERN",
"value": "r[0-9]*"
},
"policy_ptype": {
"type": "PATTERN",
"value": "p[0-9]*"
},
"role_ptype": {
"type": "PATTERN",
"value": "g[0-9]*"
},
"policy_effect_ptype": {
"type": "PATTERN",
"value": "e[0-9]*"
},
"matchers_ptype": {
"type": "PATTERN",
"value": "m[0-9]*"
},
"expression_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
}
]
},
"expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "function_call"
},
{
"type": "SYMBOL",
"name": "member_expression"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "variable"
}
]
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "||"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "&&"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "=="
},
{
"type": "STRING",
"value": "!="
},
{
"type": "STRING",
"value": ">="
},
{
"type": "STRING",
"value": "<="
},
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": "in"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
}
]
},
"function_call": {
"type": "PREC",
"value": 5,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "function",
"content": {
"type": "SYMBOL",
"name": "variable"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"member_expression": {
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "."
},
{
"type": "FIELD",
"name": "property",
"content": {
"type": "SYMBOL",
"name": "variable"
}
}
]
}
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"string": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\"[^\"\\r\\n]*\""
},
{
"type": "PATTERN",
"value": "'[^'\\r\\n]*'"
}
]
},
"number": {
"type": "PATTERN",
"value": "[0-9]+"
},
"variable": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "request_ptype"
},
{
"type": "SYMBOL",
"name": "policy_ptype"
},
{
"type": "SYMBOL",
"name": "role_ptype"
},
{
"type": "SYMBOL",
"name": "policy_effect_ptype"
},
{
"type": "SYMBOL",
"name": "matchers_ptype"
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_\\-/]*"
}
},
"extras": [
{
"type": "PATTERN",
"value": "[ \\t\\r\\n]"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}