You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
510 B
21 lines
510 B
7 months ago
|
tree grammar Reduce;
|
||
|
|
||
|
options
|
||
|
{
|
||
|
tokenVocab=VecMath;
|
||
|
ASTLabelType=CommonTree;
|
||
|
output=AST;
|
||
|
filter=true;
|
||
|
language=CSharp3;
|
||
|
}
|
||
|
|
||
|
@namespace{Antlr3.Runtime.Test.Composition}
|
||
|
|
||
|
/** Rewrite: x+x to be 2*x, 2*x to be x<<1, x<<n<<m to be x<<(n+m) */
|
||
|
bottomup
|
||
|
: ^(PLUS i=INT j=INT {$i.int==$j.int}?) -> ^(MULT["*"] INT["2"] $j)
|
||
|
| ^(MULT x=INT {$x.int==2}? y=.) -> ^(SHIFT["<<"] $y INT["1"])
|
||
|
| ^(SHIFT ^(SHIFT e=. n=INT) m=INT)
|
||
|
-> ^(SHIFT["<<"] $e INT[($n.int+$m.int).ToString()])
|
||
|
;
|