tree-sitter/examples/grammars/arithmetic.cc

40 lines
1 KiB
C++
Raw Normal View History

#include "tree_sitter/compiler.h"
2014-03-28 13:51:32 -07:00
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") }));
}
2014-03-24 09:14:29 -07:00
2014-03-28 13:51:32 -07:00
extern const Grammar arithmetic({
{ "expression", choice({
sym("sum"),
sym("difference"),
sym("product"),
sym("quotient"),
sym("exponent"),
sym("group"),
2014-03-28 13:51:32 -07:00
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(")") }) },
2014-03-28 13:51:32 -07:00
{ "number", pattern("\\d+") },
{ "variable", pattern("\\a[\\w_]*") },
2014-03-28 13:51:32 -07:00
});
}