blob: 3d204c05b8f4b881ce4802fded634ff63d4d986e [file] [log] [blame]
#!/usr/bin/ruby
# encoding: utf-8
require 'antlr3/test/functional'
class TestASTRewritingTreeParsers < ANTLR3::Test::Functional
inline_grammar( <<-'END' )
grammar FlatList;
options {
language=Ruby;
output=AST;
}
a : ID INT;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar FlatListWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=FlatList;
}
a : ID INT -> INT ID;
END
inline_grammar( <<-'END' )
grammar SimpleTree;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar SimpleTreeWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=SimpleTree;
}
a : ^(ID INT) -> ^(INT ID);
END
inline_grammar( <<-END )
grammar CombinedRewriteAndAuto;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT) | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-END )
tree grammar CombinedRewriteAndAutoTree;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=CombinedRewriteAndAuto;
}
a : ^(ID INT) -> ^(INT ID) | INT;
END
inline_grammar( <<-'END' )
grammar AvoidDup;
options {
language=Ruby;
output=AST;
}
a : ID ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AvoidDupWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AvoidDup;
}
a : ID -> ^(ID ID);
END
inline_grammar( <<-'END' )
grammar Loop;
options {
language=Ruby;
output=AST;
}
a : ID+ INT+ -> (^(ID INT))+ ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar LoopWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=Loop;
}
a : (^(ID INT))+ -> INT+ ID+;
END
inline_grammar( <<-'END' )
grammar AutoDup;
options {
language=Ruby;
output=AST;
}
a : ID ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDup;
}
a : ID;
END
inline_grammar( <<-'END' )
grammar AutoDupRule;
options {
language=Ruby;
output=AST;
}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupRuleWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupRule;
}
a : b c ;
b : ID ;
c : INT ;
END
inline_grammar( <<-'END' )
grammar AutoWildcard;
options {language=Ruby;output=AST;}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoWildcardWalker;
options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard;}
a : ID .
;
END
inline_grammar( <<-'END' )
grammar AutoWildcard2;
options {language=Ruby;output=AST;}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoWildcard2Walker;
options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcard2;}
a : ^(ID .)
;
END
inline_grammar( <<-'END' )
grammar AutoWildcardWithLabel;
options {language=Ruby;output=AST;}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoWildcardWithLabelWalker;
options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithLabel;}
a : ID c=.
;
END
inline_grammar( <<-'END' )
grammar AutoWildcardWithListLabel;
options {language=Ruby;output=AST;}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoWildcardWithListLabelWalker;
options {language=Ruby;output=AST; ASTLabelType=CommonTree; tokenVocab=AutoWildcardWithListLabel;}
a : ID c+=.
;
END
inline_grammar( <<-'END' )
grammar AutoDupMultiple;
options {
language=Ruby;
output=AST;
}
a : ID ID INT;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupMultipleWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupMultiple;
}
a : ID ID INT
;
END
inline_grammar( <<-'END' )
grammar AutoDupTree;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTree;
}
a : ^(ID INT)
;
END
inline_grammar( <<-'END' )
grammar AutoDupTreeWithLabels;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWithLabelsWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTreeWithLabels;
}
a : ^(x=ID y=INT)
;
END
inline_grammar( <<-'END' )
grammar AutoDupTreeWithListLabels;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWithListLabelsWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTreeWithListLabels;
}
a : ^(x+=ID y+=INT)
;
END
inline_grammar( <<-'END' )
grammar AutoDupTreeWithRuleRoot;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWithRuleRootWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTreeWithRuleRoot;
}
a : ^(b INT) ;
b : ID ;
END
inline_grammar( <<-'END' )
grammar AutoDupTreeWithRuleRootAndLabels;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWithRuleRootAndLabelsWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTreeWithRuleRootAndLabels;
}
a : ^(x=b INT) ;
b : ID ;
END
inline_grammar( <<-'END' )
grammar AutoDupTreeWithRuleRootAndListLabels;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupTreeWithRuleRootAndListLabelsWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupTreeWithRuleRootAndListLabels;
}
a : ^(x+=b y+=c) ;
b : ID ;
c : INT ;
END
inline_grammar( <<-'END' )
grammar AutoDupNestedTree;
options {
language=Ruby;
output=AST;
}
a : x=ID y=ID INT -> ^($x ^($y INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar AutoDupNestedTreeWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=AutoDupNestedTree;
}
a : ^(ID ^(ID INT))
;
END
inline_grammar( <<-'END' )
grammar Delete;
options {
language=Ruby;
output=AST;
}
a : ID ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar DeleteWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=Delete;
}
a : ID ->
;
END
inline_grammar( <<-'END' )
grammar SetMatchNoRewrite;
options {
language=Ruby;
output=AST;
}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar SetMatchNoRewriteWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=SetMatchNoRewrite;
}
a : b INT;
b : ID | INT;
END
inline_grammar( <<-'END' )
grammar SetOptionalMatchNoRewrite;
options {
language=Ruby;
output=AST;
}
a : ID INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar SetOptionalMatchNoRewriteWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=SetOptionalMatchNoRewrite;
}
a : (ID|INT)? INT ;
END
inline_grammar( <<-'END' )
grammar SetMatchNoRewriteLevel2;
options {
language=Ruby;
output=AST;
}
a : x=ID INT -> ^($x INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar SetMatchNoRewriteLevel2Walker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=SetMatchNoRewriteLevel2;
}
a : ^(ID (ID | INT) ) ;
END
inline_grammar( <<-'END' )
grammar SetMatchNoRewriteLevel2Root;
options {
language=Ruby;
output=AST;
}
a : x=ID INT -> ^($x INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar SetMatchNoRewriteLevel2RootWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=SetMatchNoRewriteLevel2Root;
}
a : ^((ID | INT) INT) ;
END
inline_grammar( <<-END )
grammar RewriteModeCombinedRewriteAndAuto;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT) | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-END )
tree grammar RewriteModeCombinedRewriteAndAutoTree;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=RewriteModeCombinedRewriteAndAuto;
rewrite=true;
}
a : ^(ID INT) -> ^(ID["ick"] INT)
| INT // leaves it alone, returning $a.start
;
END
inline_grammar( <<-'END' )
grammar RewriteModeFlatTree;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ID INT | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeFlatTreeWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=RewriteModeFlatTree;
rewrite=true;
}
s : ID a ;
a : INT -> INT["1"]
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleFlatTree;
options {language=Ruby; output=AST;}
a : ID INT -> ID INT | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleFlatTreeWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleFlatTree; rewrite=true;}
s : a ;
a : b ;
b : ID INT -> INT ID
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleTree;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID INT) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleTreeWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree; rewrite=true;}
s : a ;
a : b ; // a.tree must become b.tree
b : ^(ID INT) -> INT
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleTree2;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID INT) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleTree2Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree2; rewrite=true;}
tokens { X; }
s : a* b ; // only b contributes to tree, but it's after a*; s.tree = b.tree
a : X ;
b : ^(ID INT) -> INT
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleTree3;
options {language=Ruby; output=AST;}
a : 'boo' ID INT -> 'boo' ^(ID INT) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleTree3Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree3; rewrite=true;}
tokens { X; }
s : 'boo' a* b ; // don't reset s.tree to b.tree due to 'boo'
a : X ;
b : ^(ID INT) -> INT
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleTree4;
options {language=Ruby; output=AST;}
a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleTree4Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree4; rewrite=true;}
tokens { X; }
s : ^('boo' a* b) ; // don't reset s.tree to b.tree due to 'boo'
a : X ;
b : ^(ID INT) -> INT
;
END
inline_grammar( <<-'END' )
grammar RewriteModeChainRuleTree5;
options {language=Ruby; output=AST;}
a : 'boo' ID INT -> ^('boo' ^(ID INT)) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeChainRuleTree5Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteModeChainRuleTree5; rewrite=true;}
tokens { X; }
s : ^(a b) ; // s.tree is a.tree
a : 'boo' ;
b : ^(ID INT) -> INT
;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRef;
options {language=Ruby; output=AST;}
a : ID INT -> ID INT | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRef; rewrite=true;}
s : a -> a ;
a : ID INT -> ID INT ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefRoot;
options {language=Ruby; output=AST;}
a : ID INT INT -> ^(INT ^(ID INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefRootWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRoot; rewrite=true;}
s : ^(a ^(ID INT)) -> a ;
a : INT ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefRootLabeled;
options {language=Ruby; output=AST;}
a : ID INT INT -> ^(INT ^(ID INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefRootLabeledWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootLabeled; rewrite=true;}
s : ^(label=a ^(ID INT)) -> a ;
a : INT ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefRootListLabeled;
options {language=Ruby; output=AST;}
a : ID INT INT -> ^(INT ^(ID INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefRootListLabeledWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefRootListLabeled; rewrite=true;}
s : ^(label+=a ^(ID INT)) -> a ;
a : INT ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefChild;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID ^(INT INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefChildWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefChild; rewrite=true;}
s : ^(ID a) -> a ;
a : ^(INT INT) ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefLabel;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID ^(INT INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefLabelWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefLabel; rewrite=true;}
s : ^(ID label=a) -> a ;
a : ^(INT INT) ;
END
inline_grammar( <<-'END' )
grammar RewriteOfRuleRefListLabel;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID ^(INT INT));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteOfRuleRefListLabelWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=RewriteOfRuleRefListLabel; rewrite=true;}
s : ^(ID label+=a) -> a ;
a : ^(INT INT) ;
END
inline_grammar( <<-'END' )
grammar RewriteModeWithPredicatedRewrites;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID["root"] ^(ID INT)) | INT -> ^(ID["root"] INT) ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar RewriteModeWithPredicatedRewritesWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=RewriteModeWithPredicatedRewrites;
rewrite=true;
}
s : ^(ID a) {
# self.buf += $s.start.inspect
};
a : ^(ID INT) -> {true}? ^(ID["ick"] INT)
-> INT
;
END
inline_grammar( <<-'END' )
grammar WildcardSingleNode;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID["root"] INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardSingleNodeWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=WildcardSingleNode;
}
s : ^(ID c=.) -> $c
;
END
inline_grammar( <<-'END' )
grammar WildcardUnlabeledSingleNode;
options {language=Ruby; output=AST;}
a : ID INT -> ^(ID INT);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardUnlabeledSingleNodeWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardUnlabeledSingleNode;}
s : ^(ID .) -> ID
;
END
inline_grammar( <<-'END' )
grammar WildcardListLabel;
options {language=Ruby; output=AST;}
a : INT INT INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardListLabelWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel;}
s : (c+=.)+ -> $c+
;
END
inline_grammar( <<-'END' )
grammar WildcardListLabel2;
options {language=Ruby; output=AST; ASTLabelType=CommonTree;}
a : x=INT y=INT z=INT -> ^($x ^($y $z) ^($y $z));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardListLabel2Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardListLabel2; rewrite=true;}
s : ^(INT (c+=.)+) -> $c+
;
END
inline_grammar( <<-'END' )
grammar WildcardGrabsSubtree;
options {language=Ruby; output=AST;}
a : ID x=INT y=INT z=INT -> ^(ID[\"root\"] ^($x $y $z));
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardGrabsSubtreeWalker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree;}
s : ^(ID c=.) -> $c
;
END
inline_grammar( <<-'END' )
grammar WildcardGrabsSubtree2;
options {language=Ruby; output=AST;}
a : ID x=INT y=INT z=INT -> ID ^($x $y $z);
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-'END' )
tree grammar WildcardGrabsSubtree2Walker;
options {language=Ruby; output=AST; ASTLabelType=CommonTree; tokenVocab=WildcardGrabsSubtree2;}
s : ID c=. -> $c
;
END
inline_grammar( <<-END )
grammar CombinedRewriteAndAuto;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT) | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-END )
tree grammar CombinedRewriteAndAutoWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=CombinedRewriteAndAuto;
}
a : ^(ID INT) -> ^(INT ID) | INT;
END
inline_grammar( <<-END )
grammar RewriteModeCombinedRewriteAndAuto;
options {
language=Ruby;
output=AST;
}
a : ID INT -> ^(ID INT) | INT ;
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
WS : (' '|'\\n') {$channel=HIDDEN;} ;
END
inline_grammar( <<-END )
tree grammar RewriteModeCombinedRewriteAndAutoWalker;
options {
language=Ruby;
output=AST;
ASTLabelType=CommonTree;
tokenVocab=RewriteModeCombinedRewriteAndAuto;
rewrite=true;
}
a : ^(ID INT) -> ^(ID["ick"] INT)
| INT // leaves it alone, returning $a.start
;
END
example "flat list" do
lexer = FlatList::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = FlatList::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = FlatListWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "34 abc"
end
example "simple tree" do
lexer = SimpleTree::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = SimpleTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = SimpleTreeWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(34 abc)"
end
example "combined rewrite and auto" do
lexer = CombinedRewriteAndAuto::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = CombinedRewriteAndAuto::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
result = walker.a.tree
result.inspect.should == '(34 abc)'
lexer = CombinedRewriteAndAuto::Lexer.new( "34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = CombinedRewriteAndAuto::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = CombinedRewriteAndAutoWalker::TreeParser.new( nodes )
result = walker.a.tree
result.inspect.should == '34'
end
example "avoid dup" do
lexer = AvoidDup::Lexer.new( "abc" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AvoidDup::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AvoidDupWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(abc abc)"
end
example "loop" do
lexer = Loop::Lexer.new( "a b c 3 4 5" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = Loop::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = LoopWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "3 4 5 a b c"
end
example "auto dup" do
lexer = AutoDup::Lexer.new( "abc" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDup::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc"
end
example "auto dup rule" do
lexer = AutoDupRule::Lexer.new( "a 1" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupRule::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupRuleWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "a 1"
end
example "auto wildcard" do
lexer = AutoWildcard::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoWildcard::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoWildcardWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "auto wildcard2" do
lexer = AutoWildcard2::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoWildcard2::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoWildcard2Walker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(abc 34)"
end
example "auto wildcard with label" do
lexer = AutoWildcardWithLabel::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoWildcardWithLabel::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoWildcardWithLabelWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "auto wildcard with list label" do
lexer = AutoWildcardWithListLabel::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoWildcardWithListLabel::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoWildcardWithListLabelWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "auto dup multiple" do
lexer = AutoDupMultiple::Lexer.new( "a b 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupMultiple::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupMultipleWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "a b 3"
end
example "auto dup tree" do
lexer = AutoDupTree::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup tree with labels" do
lexer = AutoDupTreeWithLabels::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTreeWithLabels::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWithLabelsWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup tree with list labels" do
lexer = AutoDupTreeWithListLabels::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTreeWithListLabels::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWithListLabelsWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup tree with rule root" do
lexer = AutoDupTreeWithRuleRoot::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTreeWithRuleRoot::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWithRuleRootWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup tree with rule root and labels" do
lexer = AutoDupTreeWithRuleRootAndLabels::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTreeWithRuleRootAndLabels::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWithRuleRootAndLabelsWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup tree with rule root and list labels" do
lexer = AutoDupTreeWithRuleRootAndListLabels::Lexer.new( "a 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupTreeWithRuleRootAndListLabels::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupTreeWithRuleRootAndListLabelsWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a 3)"
end
example "auto dup nested tree" do
lexer = AutoDupNestedTree::Lexer.new( "a b 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = AutoDupNestedTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = AutoDupNestedTreeWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(a (b 3))"
end
example "delete" do
lexer = Delete::Lexer.new( "abc" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = Delete::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = DeleteWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == ""
end
example "set match no rewrite" do
lexer = SetMatchNoRewrite::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = SetMatchNoRewrite::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = SetMatchNoRewriteWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "set optional match no rewrite" do
lexer = SetOptionalMatchNoRewrite::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = SetOptionalMatchNoRewrite::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = SetOptionalMatchNoRewriteWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "set match no rewrite level2" do
lexer = SetMatchNoRewriteLevel2::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = SetMatchNoRewriteLevel2::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = SetMatchNoRewriteLevel2Walker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(abc 34)"
end
example "set match no rewrite level2 root" do
lexer = SetMatchNoRewriteLevel2Root::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = SetMatchNoRewriteLevel2Root::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = SetMatchNoRewriteLevel2RootWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(abc 34)"
end
example "rewrite mode combined rewrite and auto" do
parser_test = proc do |input, expected_output|
lexer = RewriteModeCombinedRewriteAndAuto::Lexer.new( input )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeCombinedRewriteAndAuto::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeCombinedRewriteAndAutoWalker::TreeParser.new( nodes )
result = walker.a
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == expected_output
end
parser_test[ 'abc 34', '(ick 34)' ]
parser_test[ '34', '34' ]
end
example "rewrite mode flat tree" do
lexer = RewriteModeFlatTree::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeFlatTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeFlatTreeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 1"
end
example "rewrite mode chain rule flat tree" do
lexer = RewriteModeChainRuleFlatTree::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleFlatTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleFlatTreeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "34 abc"
end
example "rewrite mode chain rule tree" do
lexer = RewriteModeChainRuleTree::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleTree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleTreeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "34"
end
example "rewrite mode chain rule tree2" do
lexer = RewriteModeChainRuleTree2::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleTree2::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleTree2Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "34"
end
example "rewrite mode chain rule tree3" do
lexer = RewriteModeChainRuleTree3::Lexer.new( "boo abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleTree3::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleTree3Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "boo 34"
end
example "rewrite mode chain rule tree4" do
lexer = RewriteModeChainRuleTree4::Lexer.new( "boo abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleTree4::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleTree4Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(boo 34)"
end
example "rewrite mode chain rule tree5" do
lexer = RewriteModeChainRuleTree5::Lexer.new( "boo abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeChainRuleTree5::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeChainRuleTree5Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(boo 34)"
end
example "rewrite of rule ref" do
lexer = RewriteOfRuleRef::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRef::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc 34"
end
example "rewrite of rule ref root" do
lexer = RewriteOfRuleRefRoot::Lexer.new( "abc 12 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefRoot::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefRootWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(12 (abc 34))"
end
example "rewrite of rule ref root labeled" do
lexer = RewriteOfRuleRefRootLabeled::Lexer.new( "abc 12 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefRootLabeled::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefRootLabeledWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(12 (abc 34))"
end
example "rewrite of rule ref root list labeled" do
lexer = RewriteOfRuleRefRootListLabeled::Lexer.new( "abc 12 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefRootListLabeled::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefRootListLabeledWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(12 (abc 34))"
end
example "rewrite of rule ref child" do
lexer = RewriteOfRuleRefChild::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefChild::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefChildWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(34 34)"
end
example "rewrite of rule ref label" do
lexer = RewriteOfRuleRefLabel::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefLabel::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefLabelWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(34 34)"
end
example "rewrite of rule ref list label" do
lexer = RewriteOfRuleRefListLabel::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteOfRuleRefListLabel::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteOfRuleRefListLabelWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(34 34)"
end
example "rewrite mode with predicated rewrites" do
lexer = RewriteModeWithPredicatedRewrites::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = RewriteModeWithPredicatedRewrites::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = RewriteModeWithPredicatedRewritesWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(root (ick 34))"
end
example "wildcard single node" do
lexer = WildcardSingleNode::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardSingleNode::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardSingleNodeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "34"
end
example "wildcard unlabeled single node" do
lexer = WildcardUnlabeledSingleNode::Lexer.new( "abc 34" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardUnlabeledSingleNode::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardUnlabeledSingleNodeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "abc"
end
example "wildcard grabs subtree" do
lexer = WildcardGrabsSubtree::Lexer.new( "abc 1 2 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardGrabsSubtree::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardGrabsSubtreeWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(1 2 3)"
end
example "wildcard grabs subtree2" do
lexer = WildcardGrabsSubtree2::Lexer.new( "abc 1 2 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardGrabsSubtree2::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardGrabsSubtree2Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(1 2 3)"
end
example "wildcard list label" do
lexer = WildcardListLabel::Lexer.new( "1 2 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardListLabel::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardListLabelWalker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "1 2 3"
end
example "wildcard list label2" do
lexer = WildcardListLabel2::Lexer.new( "1 2 3" )
tokens = ANTLR3::CommonTokenStream.new( lexer )
parser = WildcardListLabel2::Parser.new( tokens )
result = parser.a
nodes = ANTLR3::AST::CommonTreeNodeStream.new( result.tree )
nodes.token_stream = tokens
walker = WildcardListLabel2Walker::TreeParser.new( nodes )
result = walker.s
stree = result.tree.nil? ? '' : result.tree.inspect
stree.should == "(2 3) (2 3)"
end
end