extensions
extensions copied to clipboard
BrightScript support written by a LLM
Check for existing issues
- [X] Completed
Language
BrightScript
Tree Sitter parser link
No response
Language server link
No response
Misc notes
Multi-turn prompt for LLM:
- Do you know the tree-sitter format from Github?
- Do you know the Brightscript language by Roku?
- Can you generate a tree-sitter specifcation for Brightscript?
Response: (this likely needs further promptgramming and/or someone with actual domain knowledge of tree-sitter)
// tree-sitter-brightscript/grammar.js
module.exports = grammar({
name: 'brightscript',
extras: $ => [
/\s/, // whitespace
$.comment
],
rules: {
source_file: $ => repeat($._statement),
_statement: $ => choice(
$.assignment_statement,
$.if_statement,
$.while_statement,
$.for_statement,
$.function_declaration,
$.return_statement,
$.expression_statement
),
assignment_statement: $ => seq(
field('left', $.identifier),
'=',
field('right', $.expression),
'\n'
),
if_statement: $ => seq(
'if',
field('condition', $.expression),
'then',
repeat($._statement),
optional(seq('else', repeat($._statement))),
'end if'
),
while_statement: $ => seq(
'while',
field('condition', $.expression),
repeat($._statement),
'end while'
),
for_statement: $ => seq(
'for',
field('variable', $.identifier),
'=',
field('start', $.expression),
'to',
field('end', $.expression),
optional(seq('step', field('step', $.expression))),
repeat($._statement),
'end for'
),
function_declaration: $ => seq(
'function',
field('name', $.identifier),
'(',
optional($.parameter_list),
')',
repeat($._statement),
'end function'
),
parameter_list: $ => commaSep1($.identifier),
return_statement: $ => seq(
'return',
optional($.expression),
'\n'
),
expression_statement: $ => seq(
$.expression,
'\n'
),
expression: $ => choice(
$.identifier,
$.number,
$.string,
$.binary_expression,
$.function_call
),
binary_expression: $ => prec.left(seq(
field('left', $.expression),
field('operator', choice('+', '-', '*', '/', '>', '<', '>=', '<=', '=', '<>')),
field('right', $.expression)
)),
function_call: $ => seq(
field('function', $.identifier),
'(',
optional($.argument_list),
')'
),
argument_list: $ => commaSep1($.expression),
identifier: $ => /[a-zA-Z_][a-zA-Z0-9_]*/,
number: $ => /\d+(\.\d+)?/,
string: $ => /"[^"]*"/,
comment: $ => token(seq("'", /.*/))
}
});
function commaSep1(rule) {
return seq(rule, repeat(seq(',', rule)));
}