UNPKG

tree-sitter-lotus

Version:
1,520 lines 30.8 kB
{ "$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": {} }