Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.antlr.codegen.templates.JavaScript.ASTParser.stg Maven / Gradle / Ivy
/** Templates for building ASTs during normal parsing.
*
* Deal with many combinations. Dimensions are:
* Auto build or rewrite
* no label, label, list label (label/no-label handled together)
* child, root
* token, set, rule, wildcard
*
* The situation is not too bad as rewrite (->) usage makes ^ and !
* invalid. There is no huge explosion of combinations.
*/
group ASTParser;
@rule.setErrorReturnValue() ::= <<
retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
>>
// TOKEN AST STUFF
/** ID and output=AST */
tokenRef(token,label,elementIndex,terminalOptions) ::= <<
if ( ) {
_tree = ;
this.adaptor.addChild(root_0, _tree);
}
>>
/** ID! and output=AST (same as plain tokenRef) */
tokenRefBang(token,label,elementIndex) ::= ""
/** ID^ and output=AST */
tokenRefRuleRoot(token,label,elementIndex,terminalOptions) ::= <<
if ( ) {
_tree = ;
root_0 = this.adaptor.becomeRoot(_tree, root_0);
}
>>
/** ids+=ID! and output=AST */
tokenRefBangAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
>>
/** label+=TOKEN when output=AST but not rewrite alt */
tokenRefAndListLabel(token,label,elementIndex,terminalOptions) ::= <<
>>
/** Match label+=TOKEN^ when output=AST but not rewrite alt */
tokenRefRuleRootAndListLabel(token,label,terminalOptions,elementIndex) ::= <<
>>
// SET AST
// the match set stuff is interesting in that it uses an argument list
// to pass code to the default matchSet; another possible way to alter
// inherited code. I don't use the region stuff because I need to pass
// different chunks depending on the operator. I don't like making
// the template name have the operator as the number of templates gets
// large but this is the most flexible--this is as opposed to having
// the code generator call matchSet then add root code or ruleroot code
// plus list label plus ... The combinations might require complicated
// rather than just added on code. Investigate that refactoring when
// I have more time.
matchSet(s,label,terminalOptions,elementIndex,postmatchCode) ::= <<
if ( ) this.adaptor.addChild(root_0, );})>
>>
matchRuleBlockSet(s,label,terminalOptions,elementIndex,postmatchCode,treeLevel="0") ::= <<
>>
matchSetBang(s,label,elementIndex,postmatchCode) ::= ""
// note there is no matchSetTrack because -> rewrites force sets to be
// plain old blocks of alts: (A|B|...|C)
matchSetRuleRoot(s,label,terminalOptions,elementIndex,debug) ::= <<
=input.LT(1);<\n>
if ( ) root_0 = this.adaptor.becomeRoot(, root_0);})>
>>
// RULE REF AST
/** rule when output=AST */
ruleRef(rule,label,elementIndex,args,scope) ::= <<
if ( ) this.adaptor.addChild(root_0, .getTree());
>>
/** rule! is same as normal rule ref */
ruleRefBang(rule,label,elementIndex,args,scope) ::= ""
/** rule^ */
ruleRefRuleRoot(rule,label,elementIndex,args,scope) ::= <<
if ( ) root_0 = this.adaptor.becomeRoot(.getTree(), root_0);
>>
/** x+=rule when output=AST */
ruleRefAndListLabel(rule,label,elementIndex,args,scope) ::= <<
>>
/** x+=rule! when output=AST is a rule ref with list addition */
ruleRefBangAndListLabel(rule,label,elementIndex,args,scope) ::= <<
>>
/** x+=rule^ */
ruleRefRuleRootAndListLabel(rule,label,elementIndex,args,scope) ::= <<
>>
// WILDCARD AST
wildcard(label,elementIndex) ::= <<
if ( ) {
_tree = this.adaptor.create();
this.adaptor.addChild(root_0, _tree);
}
>>
wildcardBang(label,elementIndex) ::= ""
wildcardRuleRoot(label,elementIndex) ::= <<
if ( ) {
_tree = this.adaptor.create();
root_0 = this.adaptor.becomeRoot(_tree, root_0);
}
>>
createNodeFromToken(label,terminalOptions) ::= <<
new ()
this.adaptor.create()
>>
ruleCleanUp() ::= <<
if ( ) {<\n>
retval.tree = this.adaptor.rulePostProcessing(root_0);
this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
>>