[antlr-interest] AST Rewrite & tree filters support using ActionScript
George Scott
george.scott at gmail.com
Mon Mar 16 20:21:00 PDT 2009
Des,
Tree rewrites and filters should work. I think the only problem is you are
missing a "var" declaration in your rule when you declare iref. Also, you
will get a runtime error if you try to pass in a Number to construct a token
type. You must use the "int" type, so you should change your
iref declaration to be int and the return type of your function as well.
For example:
@members {
// This code needs to be implemented in a child class
public function convertLocalReference(ref:CommonTree):int {return
TokenConstants.INVALID_TOKEN_TYPE;}
}
reference
: ^(LREF lr=NAME) { var iref:int = convertLocalReference($lr);
} -> ^(IREF [iref])
;
If you are not doing any processing in your convertLocalReference() function
then you can simplify futher to:
reference
: ^(LREF lr=NAME) -> ^(IREF [$lr.type])
;
On Mon, Mar 16, 2009 at 6:51 PM, Des Hartman <des at deshartman.com> wrote:
> George
>
> Is AST rewrite and Tree filters supported in ActionScript? I have the
> following code, but keep ending up with weird compiled as file. I have
> checked as many of the errors as I can, but want to make sure I am not
> wasting time with an unsupported feature.
>
> ==============================
> tree grammar L2ITree;
>
> options {
> language=ActionScript;
> tokenVocab=Formula;
> output=AST;
> ASTLabelType=CommonTree;
> filter=true;
> rewrite=true;
> }
>
> @members {
> // This code needs to be implemented in a child class
> public function convertLocalReference(ref:CommonTree):Number {return
> null;}
>
> }
>
> reference
> : ^(LREF lr=NAME) { iref:Number = convertLocalReference($lr);
> } -> ^(IREF [iref])
> ;
>
> =================================================
>
> I have attached the formula grammar.
>
> Output errors are on the following lines of code:
>
> switch (alt1) {
> case 1 :
> <snip>
> if ( this.state.backtracking==1 ) {
> iref:Number = convertLocalReference(lr);
> XXXXXXXXXX Implicit coersion of Number and Class
> }
> <snip>
> if ( this.state.backtracking==0 ) {
> retval.tree =
> root_0; XXXXXXXXXXXX Property
> is Read-only
>
> var stream_retval:RewriteRuleSubtreeStream=new
> RewriteRuleSubtreeStream(adaptor,"token retval", retval!=null?
> retval.tree:null);
> <snip>
>
> //
> C:\\usr\\workspace\\SFXFormula\\src\\com\\wiredlizard\\grammar\\L2ITree.g:39:79:
> ^( IREF[iref] )
> {
> var root_1:CommonTree =
> CommonTree(adaptor.nil());
> root_1 =
> CommonTree(adaptor.becomeRoot(CommonTree(adaptor.create(IREF, iref)),
> root_1)); XXXXXXXXXXX Access of undefined property iref
>
> adaptor.addChild(root_0, root_1);
>
> <snip>
> retval.tree =
> CommonTree(adaptor.rulePostProcessing(root_0)); XXXXXXXXXXXX
> Property is Read-only
>
> input.replaceChildren(adaptor.getParent(retval.start),
>
> adaptor.getChildIndex(retval.start),
> adaptor.getChildIndex(_last),
> retval.tree);}
> }
>
> Thanks
> Des
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090316/6a75ddd5/attachment.html
More information about the antlr-interest
mailing list