diff options
Diffstat (limited to 'tool/src/main/resources/org/antlr/codegen/templates/Ruby/ASTTreeParser.stg')
-rw-r--r-- | tool/src/main/resources/org/antlr/codegen/templates/Ruby/ASTTreeParser.stg | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/tool/src/main/resources/org/antlr/codegen/templates/Ruby/ASTTreeParser.stg b/tool/src/main/resources/org/antlr/codegen/templates/Ruby/ASTTreeParser.stg new file mode 100644 index 0000000..70938cd --- /dev/null +++ b/tool/src/main/resources/org/antlr/codegen/templates/Ruby/ASTTreeParser.stg @@ -0,0 +1,241 @@ +gatedAction(block) ::= << +<if(backtracking)> +if <actions.(actionScope).synpredgate> + <block> +end +<else> +<block> +<endif> +>> + +ruleDeclarations() ::= << +<super.ruleDeclarations()> +_last = _first_0 = nil<\n> +>> + +noRewrite(rewriteBlockLevel, treeLevel) ::= << +<gatedAction({ +<if(rewriteMode)> +return_value.tree = _first_0 +if @adaptor.parent( return_value.tree ) && @adaptor.flat_list?( @adaptor.parent( return_value.tree ) ) + return_value.tree = @adaptor.parent( return_value.tree ) +end +<endif> +})> +>> + +tree(root, actionsAfterRoot, children, nullableChildList, + enclosingTreeLevel, treeLevel) ::= << +_save_last_<treeLevel> = _last = @input.look +_first_<treeLevel> = nil +<if(!rewriteMode)> +root_<treeLevel> = @adaptor.create_flat_list<\n> +<endif> +<root:element()> +<if(rewriteMode)> +<gatedAction({ +<if(root.el.rule)> +_first_<enclosingTreeLevel> ||= <root.el.label; format="label">.tree<\n> +<else> +_first_<enclosingTreeLevel> ||= <root.el.label; format="label"><\n> +<endif> +})> +<endif> +<actionsAfterRoot:element()> +<if(nullableChildList)> +if @input.peek == DOWN + match( DOWN, nil ) + <children:element()> + match( UP, nil ) +end<\n> +<else> +match( DOWN, nil ) +<children:element()> +match( UP, nil )<\n> +<endif> +<if(!rewriteMode)> +@adaptor.add_child( root_<enclosingTreeLevel>, root_<treeLevel> )<\n> +<endif> +_last = _save_last_<treeLevel> + +>> + +tokenRefBang(token,label,elementIndex,terminalOptions) ::= << +_last = @input.look +<super.tokenRef(...)> +>> + +tokenRef(token,label,elementIndex,terminalOptions) ::= << +_last = @input.look +<super.tokenRef(...)> +<if(!rewriteMode)> +<gatedAction({ +<if(terminalOptions.node)> +tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> ) +<else> +tree_for_<label> = @adaptor.copy_node( <label; format="label"> ) +<endif><\n> +@adaptor.add_child( root_<treeLevel>, tree_for_<label> ) +})> +<else> <! rewrite mode !> +<gatedAction({ +_first_<treeLevel> ||= <label; format="label"><\n> +})> +<endif> +>> + + + +tokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= << +<tokenRef(...)> +<addToList(elem={<label; format="label">},...)> +>> + +tokenRefRuleRoot(token,label,elementIndex,terminalOptions) ::= << +_last = @input.look +<super.tokenRef(...)> +<if(!rewriteMode)> +<gatedAction({ +<if(terminalOptions.node)> +tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> ) +<else> +tree_for_<label> = @adaptor.copy_node( <label; format="label"> ) +<endif><\n> +root_<treeLevel> = @adaptor.become_root( tree_for_<label>, root_<treeLevel> ) +})> +<endif> +>> + +tokenRefRuleRootAndListLabel(token,label,elementIndex,terminalOptions) ::= << +<tokenRefRuleRoot(...)> +<addToList(elem={<label; format="label">},...)> +>> + +wildcard(token,label,elementIndex,terminalOptions) ::= << +_last = @input.look +<super.wildcard(...)> +<if(!rewriteMode)> +<gatedAction({ +tree_for_<label> = @adaptor.copy_tree( <label; format="label"> ) +@adaptor.add_child( root_<treeLevel>, tree_for_<label> ) +})> +<else> <! rewrite mode !> +<gatedAction({ +_first_<treeLevel> and _first_<treeLevel> = <label; format="label"> +})> +<endif> +>> + +matchSet(s,label,terminalOptions,elementIndex,postmatchCode) ::= << +_last = @input.look +<super.matchSet(postmatchCode={ +<if(!rewriteMode)> +<gatedAction({ +<if(terminalOptions.node)> +tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> ) +<else> +tree_for_<label> = @adaptor.copy_node( <label; format="label"> ) +<endif><\n> +@adaptor.add_child( root_<treeLevel>, tree_for_<label> ) +})> +<endif> +}, ...)> +>> + + + +matchRuleBlockSet(s,label,terminalOptions,elementIndex,postmatchCode,treeLevel="0") ::= << +<matchSet(...)> +<noRewrite(...)> +>> + + + +matchSetBang(s,label,terminalOptions,elementIndex,postmatchCode) ::= << +_last = @input.look +<super.matchSet(...)> +>> + +matchSetRuleRoot(s,label,terminalOptions,elementIndex,debug) ::= << +<super.matchSet(postmatchCode={ +<if(!rewriteMode)> +<gatedAction({ +<if(terminalOptions.node)> +tree_for_<label> = <terminalOptions.node; format="constantPath">.new( <label; format="label"> ) +<else> +tree_for_<label> = @adaptor.copy_node( <label; format="label"> ) +<endif><\n> +root_<treeLevel> = @adaptor.become_root( tree_for_<label>, root_<treeLevel> ) +})> +<endif> +}, ...)> +>> + +ruleRef(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRef(...)> +<gatedAction({ +<if(!rewriteMode)> +@adaptor.add_child( root_<treeLevel>, <label; format="label">.tree ) +<else> +_first_<treeLevel> ||= <label; format="label">.tree<\n> +<endif> +})> +>> + +ruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= << +<ruleRef(...)> +<addToList(elem={<label; format="label">.tree},...)> +>> + +ruleRefRuleRoot(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRef(...)> +<if(!rewriteMode)> +<gatedAction({ +root_<treeLevel> = @adaptor.become_root( <label; format="label">.tree, root_<treeLevel> ) +})> +<endif> +>> + +ruleRefRuleRootAndListLabel(rule,label,elementIndex,args,scope) ::= << +<ruleRefRuleRoot(...)> +<addToList(elem={<label; format="label">.tree},...)> +>> + +ruleRefTrack(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRefTrack(...)> +>> + +ruleRefTrackAndListLabel(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRefTrackAndListLabel(...)> +>> + +ruleRefRuleRootTrack(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRefRootTrack(...)> +>> + +ruleRefRuleRootTrackAndListLabel(rule,label,elementIndex,args,scope) ::= << +_last = @input.look +<super.ruleRefRuleRootTrackAndListLabel(...)> +>> + +createRewriteNodeFromElement(token,terminalOptions,scope) ::= << +<if(terminalOptions.node)> +<terminalOptions.node; format="constantPath">.new( stream_<token>.next_node ) +<else> +stream_<token>.next_node +<endif> +>> + +ruleCleanUp() ::= << +<super.ruleCleanUp()> +<if(!rewriteMode)> +<gatedAction({ +return_value.tree = @adaptor.rule_post_processing( root_0 ) +})> +<endif> +>> |