tree-sitter-lotus
Version:
Tree-sitter grammar for LotusScript
1,520 lines • 30.8 kB
JSON
{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "lotus",
"word": "identifier",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "option_stmt"
},
{
"type": "SYMBOL",
"name": "class_decl"
},
{
"type": "SYMBOL",
"name": "sub_decl"
},
{
"type": "SYMBOL",
"name": "function_decl"
},
{
"type": "SYMBOL",
"name": "statement"
}
]
}
},
"option_stmt": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "keyword",
"content": {
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "Option Public"
},
{
"type": "STRING",
"value": "Option Private"
},
{
"type": "STRING",
"value": "Option Declare"
},
{
"type": "STRING",
"value": "Option Explicit"
}
]
},
"named": true,
"value": "keyword"
}
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"class_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Class"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "Class"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"sub_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Sub"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "param_list"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "Sub"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"function_decl": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Function"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "parameters",
"content": {
"type": "SYMBOL",
"name": "param_list"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "As"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "Function"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"param_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "param"
},
{
"type": "STRING",
"value": ","
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "param"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"param": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "As"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"type": {
"type": "SYMBOL",
"name": "identifier"
},
"statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "SYMBOL",
"name": "keyword_stmt"
},
{
"type": "SYMBOL",
"name": "identifier_stmt"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "for_statement"
},
{
"type": "SYMBOL",
"name": "do_statement"
},
{
"type": "SYMBOL",
"name": "while_statement"
},
{
"type": "SYMBOL",
"name": "select_statement"
},
{
"type": "SYMBOL",
"name": "dim_statement"
},
{
"type": "SYMBOL",
"name": "set_statement"
},
{
"type": "SYMBOL",
"name": "let_statement"
},
{
"type": "SYMBOL",
"name": "call_statement"
}
]
},
"if_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "If"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "Then"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "ElseIf"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "Then"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Else"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "If"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"for_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "For"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "To"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Step"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "Next"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"do_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Do"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "While"
},
{
"type": "STRING",
"value": "Until"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "Loop"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "While"
},
{
"type": "STRING",
"value": "Until"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"while_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "While"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
},
{
"type": "STRING",
"value": "Wend"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"select_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Select"
},
{
"type": "STRING",
"value": "Case"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "case_clause"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Case"
},
{
"type": "STRING",
"value": "Else"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "Select"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"case_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Case"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "_eol"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "statement"
}
}
]
},
"dim_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Dim"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "As"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"set_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Set"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"let_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Let"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"call_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Call"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "argument_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "primary_expression"
},
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "function_call"
},
{
"type": "SYMBOL",
"name": "member_expression"
}
]
},
"primary_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "boolean"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
}
]
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "arithmetic_expression"
},
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "SYMBOL",
"name": "logical_expression"
}
]
},
"arithmetic_expression": {
"type": "PREC_LEFT",
"value": 0,
"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": "Mod"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
},
"comparison_expression": {
"type": "PREC_LEFT",
"value": 0,
"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": "SYMBOL",
"name": "expression"
}
]
}
},
"logical_expression": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "And"
},
{
"type": "STRING",
"value": "Or"
},
{
"type": "STRING",
"value": "Not"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
},
"unary_expression": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "Not"
}
]
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"function_call": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "argument_list"
},
{
"type": "BLANK"
}
]
}
]
},
"argument_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"member_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"number": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\d+\\.\\d+"
},
{
"type": "PATTERN",
"value": "\\d+"
}
]
}
},
"string": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\"[^\"]*\""
},
{
"type": "PATTERN",
"value": "'[^']*'"
}
]
}
},
"boolean": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "True"
},
{
"type": "STRING",
"value": "False"
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "Rem"
},
{
"type": "PATTERN",
"value": "\\s+.*"
}
]
}
]
}
},
"_eol": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\r?\\n"
},
{
"type": "PATTERN",
"value": ";"
}
]
}
},
"keyword_stmt": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "keyword"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"identifier_stmt": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "PATTERN",
"value": "[^'\\n\\r]+"
}
},
{
"type": "SYMBOL",
"name": "_eol"
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[A-Za-z][_A-Za-z0-9]*"
},
"keyword": {
"type": "TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "Dim"
},
{
"type": "STRING",
"value": "Set"
},
{
"type": "STRING",
"value": "Let"
},
{
"type": "STRING",
"value": "If"
},
{
"type": "STRING",
"value": "Else"
},
{
"type": "STRING",
"value": "ElseIf"
},
{
"type": "STRING",
"value": "End"
},
{
"type": "STRING",
"value": "For"
},
{
"type": "STRING",
"value": "Each"
},
{
"type": "STRING",
"value": "Do"
},
{
"type": "STRING",
"value": "Loop"
},
{
"type": "STRING",
"value": "While"
},
{
"type": "STRING",
"value": "Wend"
},
{
"type": "STRING",
"value": "Select"
},
{
"type": "STRING",
"value": "Case"
},
{
"type": "STRING",
"value": "Call"
},
{
"type": "STRING",
"value": "Use"
},
{
"type": "STRING",
"value": "UseLS"
},
{
"type": "STRING",
"value": "Then"
},
{
"type": "STRING",
"value": "To"
},
{
"type": "STRING",
"value": "Step"
},
{
"type": "STRING",
"value": "Next"
},
{
"type": "STRING",
"value": "True"
},
{
"type": "STRING",
"value": "False"
},
{
"type": "STRING",
"value": "Rem"
},
{
"type": "STRING",
"value": "Class"
},
{
"type": "STRING",
"value": "Sub"
},
{
"type": "STRING",
"value": "Function"
},
{
"type": "STRING",
"value": "As"
},
{
"type": "STRING",
"value": "Option"
},
{
"type": "STRING",
"value": "Public"
},
{
"type": "STRING",
"value": "Private"
},
{
"type": "STRING",
"value": "Declare"
},
{
"type": "STRING",
"value": "Explicit"
}
]
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s|\\\\\\r?\\n"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [
[
"primary_expression",
"function_call"
],
[
"comparison_expression",
"unary_expression"
],
[
"arithmetic_expression",
"unary_expression"
],
[
"logical_expression",
"unary_expression"
],
[
"unary_expression",
"member_expression"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}