⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ast.stg

📁 antlr最新版本V3源代码
💻 STG
📖 第 1 页 / 共 2 页
字号:
/** x+=rule^ */ruleRefRuleRootAndListLabel(rule,label,elementIndex,args) ::= <<<ruleRefRuleRoot(...)><listLabelAST(...)>>>// WILDCARD ASTwildcard(label,elementIndex) ::= <<<super.wildcard(...)><if(backtracking)>if ( BACKTRACKING==0 ) {<endif><label>_tree = ADAPTOR->create(ADAPTOR, <label>);ADAPTOR->addChild(ADAPTOR, root_0, <label>_tree);<if(backtracking)>}<endif>>>wildcardBang(label,elementIndex) ::= "<super.wildcard(...)>"wildcardRuleRoot(label,elementIndex) ::= <<<super.wildcard(...)><if(backtracking)>if ( BACKTRACKING==0 ) {<endif><label>_tree = ADAPTOR->create(ADAPTOR, <label>);root_0 = ADAPTOR->becomeRoot(ADAPTOR, <label>_tree, root_0);<if(backtracking)>}<endif>>>// there's got to be a better way// R e w r i t erewriteCode(	alts, 	description,	referencedElementsDeep, // ALL referenced elements to right of ->	referencedTokenLabels,	referencedTokenListLabels,	referencedRuleLabels,	referencedRuleListLabels,	rewriteBlockLevel, 	enclosingTreeLevel, 	treeLevel) ::=<< /* AST REWRITE * elements          : <referencedElementsDeep; separator=", "> * token labels      : <referencedTokenLabels; separator=", "> * rule labels       : <referencedRuleLabels; separator=", "> * token list labels : <referencedTokenListLabels; separator=", "> * rule list labels  : <referencedRuleListLabels; separator=", "> */<if(backtracking)>if ( BACKTRACKING==0 ) <\n><endif>{	<rewriteCodeLabelsDecl()>	<rewriteCodeLabelsInit()>	root_0			    = ADAPTOR->nil(ADAPTOR);	<prevRuleRootRef()>.tree    = root_0;	<alts:rewriteAlt(); separator="else ">	<rewriteCodeLabelsFree()>}>>rewriteCodeLabelsDecl() ::= <<<referencedTokenLabels    :{pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_<it>;};    separator="\n"><referencedTokenListLabels    :{pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_<it>;};    separator="\n"><referencedRuleLabels    :{pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_<it>;};    separator="\n"><referencedRuleListLabels    :{pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_<it>;};    separator="\n">>>rewriteCodeLabelsInit() ::= <<<referencedTokenLabels    :{stream_<it>=antlr3RewriteRuleTokenStreamNewAEE(ADAPTOR, (pANTLR3_UINT8)"token <it>", <it>);};    separator="\n"><referencedTokenListLabels    :{stream_<it>=antlr3RewriteRuleTokenStreamNewAEV(ADAPTOR, (pANTLR3_UINT8)"token <it>", list_<it>);};    separator="\n"><referencedRuleLabels     :{stream_<it>=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, (pANTLR3_UINT8)"token <it>", <it>.tree != NULL ? <it>.tree : NULL);};    separator="\n"><referencedRuleListLabels    :{stream_<it>=antlr3RewriteRuleSubtreeStreamNewAEV(ADAPTOR, (pANTLR3_UINT8)"token <it>", list_<it>);};    separator="\n">>>rewriteCodeLabelsFree() ::= <<<referencedTokenLabels    :{stream_<it>->free(stream_<it>);};    separator="\n"><referencedTokenListLabels    :{stream_<it>->free(stream_<it>);};    separator="\n"><referencedRuleLabels     :{stream_<it>->free(stream_<it>);};    separator="\n"><referencedRuleListLabels    :{stream_<it>->free(stream_<it>);};    separator="\n">>>/** Generate code for an optional rewrite block; note it uses the deep ref'd element  *  list rather shallow like other blocks.  */rewriteOptionalBlock(	alt,	rewriteBlockLevel,	referencedElementsDeep, // all nested refs	referencedElements,		// elements in immediately block; no nested blocks	description) ::=<<// <fileName>:<description>{	if ( <referencedElementsDeep:{el | stream_<el>->hasNext(stream_<el>)}; separator="||"> ) 	{		<alt>	}	<referencedElementsDeep:{el | stream_<el>->reset(stream_<el>);<\n>}>}<\n>>>rewriteClosureBlock(	alt,	rewriteBlockLevel,	referencedElementsDeep, // all nested refs	referencedElements,		// elements in immediately block; no nested blocks	description) ::=<<// <fileName>:<description>{	while ( <referencedElements:{el | stream_<el>->hasNext(stream_<el>)}; separator="||"> ) 	{		<alt>	}	<referencedElements:{el | stream_<el>->reset(stream_<el>);<\n>}>}<\n>>>RewriteEarlyExitException() ::=<<CONSTRUCTEX();EXCEPTION->type         = ANTLR3_REWRITE_EARLY_EXCEPTION;EXCEPTION->name         = ANTLR3_REWRITE_EARLY_EXCEPTION_NAME;>>rewritePositiveClosureBlock(	alt,	rewriteBlockLevel,	referencedElementsDeep, // all nested refs	referencedElements,		// elements in immediately block; no nested blocks	description) ::=<<if ( !(<referencedElements:{el | stream_<el>->hasNext(stream_<el>)}; separator="||">) ) {    <RewriteEarlyExitException()>}else{	while ( <referencedElements:{el | stream_<el>->hasNext(stream_<el>)}; separator="||"> ) {		<alt>	}	<referencedElements:{el | stream_<el>->reset(stream_<el>);<\n>}>}>>rewriteAlt(a) ::= <<// <a.description><if(a.pred)>if (<a.pred>) {    <a.alt>}<\n><else>{    <a.alt>}<\n><endif>>>/** For empty rewrites: "r : ... -> ;" */rewriteEmptyAlt() ::= "root_0 = NULL; /* \<-- rewriteEmptyAlt()) */"rewriteTree(root,children,description,enclosingTreeLevel,treeLevel) ::= <<// <fileName>:<description>{    pANTLR3_BASE_TREE root_<treeLevel> = ADAPTOR->nil(ADAPTOR);    <root:rewriteElement()>    <children:rewriteElement()>    ADAPTOR->addChild(ADAPTOR, root_<enclosingTreeLevel>, root_<treeLevel>);}<\n>>>rewriteElementList(elements) ::= "<elements:rewriteElement()>"rewriteElement(e) ::= <<<@pregen()><e.el>>>/** Gen ID or ID[args] */rewriteTokenRef(token,elementIndex,args) ::= <<<if(args)>ADAPTOR->addChildToken(ADAPTOR, root_<treeLevel>, ADAPTOR->createToken(ADAPTOR, <args; separator=", ">));<\n><else>ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, stream_<token>->next(stream_<token>));<\n><endif>>>/** Gen $label ... where defined via label=ID */rewriteTokenLabelRef(label,elementIndex) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, stream_<label>->next(stream_<label>));<\n>>>/** Gen $label ... where defined via label+=ID */rewriteTokenListLabelRef(label,elementIndex) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, stream_<label>->next(stream_<label>));<\n>>>/** Gen ^($label ...) */rewriteTokenLabelRefRoot(label,elementIndex) ::= <<root_<treeLevel> = ADAPTOR->becomeRootToken(ADAPTOR, stream_<label>->next(stream_<label>), root_<treeLevel>);<\n>>>/** Gen ^(ID ...) or ^(ID[args] ...) */rewriteTokenRefRoot(token,elementIndex,args) ::= <<<if(args)>root_<treeLevel> = ADAPTOR->becomeRootToken(ADAPTOR, ADAPTOR->createToken(ADAPTOR, <args; separator=", ">), root_<treeLevel>);<\n><else>root_<treeLevel> = ADAPTOR->becomeRoot(ADAPTOR, stream_<token>->next(stream_<token>), root_<treeLevel>);<\n><endif>>>rewriteImaginaryTokenRef(args,token,elementIndex) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, ADAPTOR->createTypeText(ADAPTOR, <token>, (pANTLR3_UINT8)<args><if(!args)>"<token>"<endif>));<\n>>>rewriteImaginaryTokenRefRoot(args,token,elementIndex) ::= <<root_<treeLevel> = ADAPTOR->becomeRoot(ADAPTOR, ADAPTOR->createTypeText(ADAPTOR, <token>, (pANTLR3_UINT8)<args><if(!args)>"<token>"<endif>), root_<treeLevel>);<\n>>>/** plain -> {foo} action */rewriteAction(action) ::= <<root_0 = <action>;<\n>>>/** What is the name of the previous value of this rule's root tree?  This *  let's us refer to $rule to mean previous value.  I am reusing the *  variable 'tree' sitting in retval struct to hold the value of root_0 right *  before I set it during rewrites.  The assign will be to retval.tree. */prevRuleRootRef() ::= "retval"rewriteRuleRef(rule,dup) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, stream_<rule>->next(stream_<rule>));<\n>>>rewriteRuleRefRoot(rule,dup) ::= <<root_<treeLevel> = ADAPTOR->becomeRoot(ADAPTOR, stream_<rule>->next(stream_<rule>), root_<treeLevel>);<\n>>>rewriteNodeAction(action) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, <action>);<\n>>>rewriteNodeActionRoot(action) ::= <<root_<treeLevel> = ADAPTOR->becomeRoot(ADAPTOR, <action>, root_<treeLevel>);<\n>>>/** Gen $ruleLabel ... where defined via ruleLabel=rule */rewriteRuleLabelRef(label) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, stream_<label>->next(stream_<label>));<\n>>>/** Gen $ruleLabel ... where defined via ruleLabel+=rule */rewriteRuleListLabelRef(label) ::= <<ADAPTOR->addChild(ADAPTOR, root_<treeLevel>, (pANTLR3_BASE_TREE)(stream_<label>->next(stream_<label>)));<\n>>>/** Gen ^($ruleLabel ...) where ruleLabel=rule */rewriteRuleLabelRefRoot(label) ::= <<root_<treeLevel> = ADAPTOR->becomeRoot(ADAPTOR, stream_<label>->nextNode(stream_<label>), root_<treeLevel>);<\n>>>/** Gen ^($ruleLabel ...) where ruleLabel+=rule */rewriteRuleListLabelRefRoot(label) ::= <<root_<treeLevel> = ADAPTOR->becomeRoot((pANTLR3_BASE_TREE)(stream_<label>->nextNode(stream_<label>)), root_<treeLevel>);<\n>>>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -