1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
extend lang.bnf.bs;
optional delimiter = SDelimiter;
void SDelimiter();
SDelimiter : "[ \n\r\t]*";
Int SExpr();
SExpr : SExpr lhs, "\+", SProd rhs {
return lhs.transform() + rhs.transform();
};
SExpr : SExpr lhs, "-", SProd rhs {
return lhs.transform() - rhs.transform();
};
SExpr : SProd expr {
return expr.transform();
};
Int SProd();
SProd : SProd lhs, "\*", SAtom rhs {
return lhs.transform() * rhs.transform();
};
SProd : SProd lhs, "/", SAtom rhs {
return lhs.transform() / rhs.transform();
};
SProd : SAtom expr {
return expr.transform();
};
Int SAtom();
SAtom : "[0-9]+" nr {
return nr.transform().toInt();
};
SAtom : "-", SAtom nr {
return 0 - nr.transform();
};
SAtom : "(", SExpr expr, ")" {
return expr.transform();
};
|