diff options
Diffstat (limited to 'antlr-3.4/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg')
-rw-r--r-- | antlr-3.4/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/antlr-3.4/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg b/antlr-3.4/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg new file mode 100644 index 0000000..fd1322f --- /dev/null +++ b/antlr-3.4/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg @@ -0,0 +1,153 @@ +/* + * [The "BSD license"] + * Copyright (c) 2011 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** Template subgroup to add template rewrite output + * If debugging, then you'll also get STDbg.stg loaded. + */ + +@outputFile.imports() ::= << +<@super.imports()> +using Antlr3.ST; +using Antlr3.ST.Language; +>> + +@genericParser.members() ::= << +<@super.members()> +private StringTemplateGroup _templateGroup = new StringTemplateGroup("<name>Templates", typeof(AngleBracketTemplateLexer) ); + +public StringTemplateGroup TemplateGroup +{ + get { return _templateGroup; } + set { _templateGroup = value; } +} +>> + +ruleReturnBaseType() ::= <% +Template<if(TREE_PARSER)>Tree<else>Parser<endif>RuleReturnScope\<StringTemplate, <labelType>> +%> + +/** x+=rule when output=template */ +ruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= << +<ruleRef(...)> +<listLabelElem(elem={<label>.Template},elemType="StringTemplate",...)> +>> + +rewriteTemplate(alts) ::= << + +// TEMPLATE REWRITE +<if(backtracking)> +if (<actions.(actionScope).synpredgate>) +{ + <alts:rewriteTemplateAlt(); separator="else "> + <if(rewriteMode)><replaceTextInLine()><endif> +} +<else> +<alts:rewriteTemplateAlt(); separator="else "> +<if(rewriteMode)><replaceTextInLine()><endif> +<endif> +>> + +replaceTextInLine() ::= << +<if(TREE_PARSER)> +((TokenRewriteStream)input.TokenStream).Replace( + input.TreeAdaptor.GetTokenStartIndex(retval.Start), + input.TreeAdaptor.GetTokenStopIndex(retval.Start), + retval.Template); +<else> +((TokenRewriteStream)input).Replace( + retval.Start.TokenIndex, + input.LT(-1).TokenIndex, + retval.Template); +<endif> +>> + +rewriteTemplateAlt(it) ::= << +// <it.description> +<if(it.pred)> +if (<it.pred>) +{ + retval.Template = <it.alt>; +}<\n> +<else> +{ + retval.Template = <it.alt>; +}<\n> +<endif> +>> + +rewriteEmptyTemplate(alts) ::= << +null; +>> + +/** Invoke a template with a set of attribute name/value pairs. + * Set the value of the rule's template *after* having set + * the attributes because the rule's template might be used as + * an attribute to build a bigger template; you get a self-embedded + * template. + */ +rewriteExternalTemplate(name,args) ::= <% +TemplateGroup.GetInstanceOf("<name>"<optionalArguments(args)>) +%> + +/** expr is a string expression that says what template to load */ +rewriteIndirectTemplate(expr,args) ::= <% +TemplateGroup.GetInstanceOf(<expr><optionalArguments(args)>) +%> + +/** Invoke an inline template with a set of attribute name/value pairs */ +rewriteInlineTemplate(args, template) ::= <% +new StringTemplate(TemplateGroup, "<template>"<optionalArguments(args)>) +%> + +optionalArguments(args) ::= << +<if(args)>, + new Dictionary\<string, object>() { <args:optionalArgument(); separator=", "> } +<endif> +>> + +optionalArgument(it) ::= << +{"<it.name>", <it.value>} +>> + +/** plain -> {foo} action */ +rewriteAction(action) ::= << +<action> +>> + +/** An action has %st.attrName=expr; or %{st}.attrName=expr; */ +actionSetAttribute(st,attrName,expr) ::= << +(<st>).SetAttribute("<attrName>",<expr>); +>> + +/** Translate %{stringExpr} */ +actionStringConstructor(stringExpr) ::= << +new StringTemplate(TemplateGroup,<stringExpr>) +>> |