REBOL 3 Docs | Guide | Concepts | Functions | Datatypes | Errors |

TOC < Back Next > | Updated: 6-Feb-2009 Edit History |

Here is an example of rule set that parses mathematical expressions and gives a precedence (a priority) to the math operators used:

expr: [term ["+" | "-"] expr | term] term: [factor ["*" | "/"] term | factor] factor: [primary "**" factor | primary] primary: [some digit | "(" expr ")"] digit: charset "0123456789"

Now we can parse many types of math expressions. The following examples return true, indicating that the expressions were valid:

```
probe parse "1 + 2 * ( 3 - 2 ) / 4" expr
true
```

```
probe parse "4/5+3**2-(5*6+1)" expr
true
```

Notice in the examples that some of the rules refer to themselves. For
instance, the expr rule includes expr. This is a useful
technique for defining repeating sequences and combinations. The rule is
**recursive** --it refers to itself.

When using recursive rules, care is required to prevent endless recursion. For instance:

expr: [expr ["+" | "-"] term]

creates an infinite loop because the first thing expr does is use expr again.

TOC < Back Next > | REBOL.com - WIP Wiki | Feedback Admin |