tree-sitter/examples/grammars/arithmetic.cc
Max Brunsfeld a437d39773 Add rule precedence construct
Still need to add some way of expressing left and right
associativity
2014-04-15 08:40:46 -07:00

39 lines
1 KiB
C++

#include "tree_sitter/compiler.h"
namespace tree_sitter_examples {
using tree_sitter::Grammar;
using namespace tree_sitter::rules;
using std::string;
static rule_ptr infix_op(string op, int precedence) {
return prec(precedence, seq({
sym("expression"),
str(op),
sym("expression") }));
}
extern const Grammar arithmetic({
{ "expression", choice({
sym("sum"),
sym("difference"),
sym("product"),
sym("quotient"),
sym("exponent"),
sym("group"),
sym("number"),
sym("variable") }) },
{ "sum", infix_op("+", 1) },
{ "difference", infix_op("-", 1) },
{ "product", infix_op("*", 2) },
{ "quotient", infix_op("/", 2) },
{ "exponent", infix_op("^", 3) },
{ "group", seq({
str("("),
err(sym("expression")),
str(")") }) },
{ "number", pattern("\\d+") },
{ "variable", pattern("\\a[\\w_]*") },
});
}