...
And now, let's distribute scalar-vector multiplies. 4*[1,2]
-> [4*1,4*2]
.
Code Block |
---|
tree grammar Simplify; options { tokenVocab=VecMath; // use tokens from VecMath.g ASTLabelType=CommonTree; // we're using CommonTree nodes output=AST; // build ASTs from input AST filter=true; // tree pattern matching, rewrited mode } topdown : ^('*' INT ^(VEC (e+=.)+)) -> ^(VEC ^('*' INT $e)+) ; bottomup : ^('*' a=. b=INT {$b.int==0}?) -> $b // x*0 -> 0 ; |
...
Code Block |
---|
$ cat t1 x = 4 * [0, 5*0, 3] $ java Test < t1 Original tree: (= x (* 4 (VEC 0 (* 5 0) 3))) (* 4 (VEC 0 (* 5 0) 3)) -> (VEC (* 4 0) (* 4 (* 5 0)) (* 4 3)) (* 4 0) -> 0 (* 5 0) -> 0 (* 4 0) -> 0 Simplified tree: (= x (VEC 0 0 (* 4 3))) $ |
Now for stuff that needs to repeatedly get applied to subtrees.
...