32 lines
No EOL
663 B
JavaScript
32 lines
No EOL
663 B
JavaScript
export default grammar({
|
|
name: 'dynamic_precedence',
|
|
|
|
extras: $ => [/\s/],
|
|
|
|
conflicts: $ => [[$.expression, $.type]],
|
|
|
|
rules: {
|
|
program: $ => choice(
|
|
$.declaration,
|
|
$.expression,
|
|
),
|
|
|
|
expression: $ => choice(
|
|
prec.left(seq($.expression, '*', $.expression)),
|
|
$.identifier
|
|
),
|
|
|
|
declaration: $ => seq(
|
|
$.type,
|
|
$.declarator,
|
|
),
|
|
|
|
declarator: $ => choice(
|
|
prec.dynamic(1, seq('*', $.identifier)),
|
|
$.identifier,
|
|
),
|
|
|
|
type: $ => $.identifier,
|
|
identifier: $ => /[a-z-A-Z]+/
|
|
}
|
|
}); |