1@parserBody.mixins() ::= << 2<@super.mixins()> 3<if(rewriteMode)> 4include ANTLR3::Template::RewriteBuilder 5<else> 6include ANTLR3::Template::Builder 7<endif> 8>> 9 10gatedAction( block ) ::= << 11<if(backtracking)> 12if <actions.(actionScope).synpredgate> 13 <block> 14end 15<else> 16<block> 17<endif> 18>> 19 20/** x+=rule when output=template */ 21ruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= << 22<ruleRef(...)> 23<listLabel(elem={<label; format="label">.template}, ...)> 24>> 25 26rewriteTemplate(alts) ::= << 27<gatedAction({ 28<first(alts):rewriteTemplateAltFirst(); anchor> 29<rest(alts):{a| els<rewriteTemplateAltRest(a)>}; anchor, separator="\n\n"> 30<if(rewriteMode)><replaceTextInLine()><endif> 31})> 32>> 33 34rewriteTemplateAltFirst(a) ::= << 35<if(a.pred)> 36if <a.pred> 37 # <a.description> 38 return_value.template = <a.alt> 39<else> 40# <a.description> 41return_value.template = <a.alt> 42<endif> 43>> 44 45rewriteTemplateAltRest(a) ::= << 46<if(a.pred)> 47if <a.pred> 48 # <a.description> 49 return_value.template = <a.alt> 50<else> 51e <! little hack to get if .. elsif .. else block right !> 52 # <a.description> 53 return_value.template = <a.alt> 54end 55<endif> 56>> 57 58replaceTextInLine() ::= << 59<if(TREE_PARSER)> 60@input.token_stream.replace( 61 @input.adaptor.token_start_index( return_value.start ), 62 @input.adaptor.token_stop_index( return_value.start ), 63 return_value.template 64) 65<else> 66@input.replace( 67 return_value.start.index, 68 @input.look( -1 ).index, 69 return_value.template 70) 71<endif> 72>> 73 74rewriteEmptyTemplate(alts) ::= << 75nil 76>> 77 78/** Invoke a template with a set of attribute name/value pairs. 79 * Set the value of the rule's template *after* having set 80 * the attributes because the rule's template might be used as 81 * an attribute to build a bigger template; you get a self-embedded 82 * template. 83 */ 84rewriteExternalTemplate(name,args) ::= << 85fetch_template( "<name>" <if(args)>, 86 <argumentMap(args)> 87<endif>) 88>> 89 90/** expr is a string expression that says what template to load */ 91rewriteIndirectTemplate(expr,args) ::= << 92fetch_template( <expr><if(args)>, <argumentMap(args)><endif> ) 93>> 94 95/** Invoke an inline template with a set of attribute name/value pairs */ 96rewriteInlineTemplate(args, template) ::= << 97create_template( "<template>"<if(args)>, <argumentMap(args)><endif> ) 98>> 99 100/** plain -> {foo} action */ 101rewriteAction(action) ::= << 102<action> 103>> 104 105/** An action has %st.attrName=expr; or %{st}.attrName=expr; */ 106actionSetAttribute(st,attrName,expr) ::= << 107( <st> )[ :<attrName> ] = <expr> 108>> 109 110/** Translate %{stringExpr} */ 111actionStringConstructor(stringExpr) ::= << 112create_template( <stringExpr> ) 113>> 114 115/* 116rulePropertyRef_text(scope, attr) ::= << 117@input.to_s(return_value.start, @input.look(-1)) 118>> 119*/ 120 121argumentMap(args) ::= << 122<args:{a|:<a.name> => <a.value>}; separator=",\n"> 123>> 124