| 477 | } |
| 478 | |
| 479 | func (t *tree) M(depth int) Node { |
| 480 | debugf(depth, "M pre : %v", t.Cur()) |
| 481 | n := t.F(depth) |
| 482 | debugf(depth, "M post: %v %v", t.Cur(), n) |
| 483 | for { |
| 484 | switch cur := t.Cur(); cur.T { |
| 485 | case lex.TokenStar, lex.TokenMultiply, lex.TokenDivide, lex.TokenModulus: |
| 486 | t.Next() |
| 487 | n = NewBinaryNode(cur, n, t.F(depth+1)) |
| 488 | default: |
| 489 | return n |
| 490 | } |
| 491 | } |
| 492 | } |
| 493 | |
| 494 | // F -> v | "(" O ")" | "!" O | "-" O | "NOT" C | "EXISTS" v | "IS" O | "AND (" O ")" | "OR (" O ")" |
| 495 | func (t *tree) F(depth int) Node { |