tree-sitter/test/fixtures/test_grammars/readme_grammar/grammar.js
2025-09-16 02:24:11 -04:00

36 lines
983 B
JavaScript

export default grammar({
name: 'readme_grammar',
// Things that can appear anywhere in the language, like comments
// and whitespace, are expressed as 'extras'.
extras: $ => [
/\s/,
$.comment,
],
rules: {
// The first rule listed in the grammar becomes the 'start rule'.
expression: $ => choice(
$.sum,
$.product,
$.number,
$.variable,
seq('(', $.expression, ')'),
),
// Tokens like '+' and '*' are described directly within the
// grammar's rules, as opposed to in a separate lexer description.
sum: $ => prec.left(1, seq($.expression, '+', $.expression)),
// Ambiguities can be resolved at compile time by assigning precedence
// values to rule subtrees.
product: $ => prec.left(2, seq($.expression, '*', $.expression)),
// Tokens can be specified using ECMAScript regexps.
number: _ => /\d+/,
comment: _ => /#.*/,
variable: _ => new RustRegex('(?i:[a-z])\\w*'),
},
});