Source: https://github.com/ericbn/js-abstract-descent-parser
expr : term (('+' | '-') term)* term : factor (('*' | '/') factor)* factor : number | '(' expr ')' number : /\d+(?:\.\d+)?/