Hi David,

Is there any way you can send me the full grammar you're using (you could
send it to just me if you don't want to send it to the public list)? I don't
use memoization in any of my grammars, so I don't have a way to test this
feature extensively.

Thanks,
Sam

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of David Daeschler
Sent: Thursday, March 03, 2011 1:45 PM
To: [email protected]
Subject: [antlr-interest] C# tree parser memoize issue?

I have a grammar that contains a 3d vector type.

Parsing the grammar for my test case yields the following AST:
http://graph.gafol.net/dZxqGkwww

<http://graph.gafol.net/dZxqGkwww>During the code generation step I am using
a tree grammar with backtracking and memoization turned on.

With memoization the following generates an error:

float f;
vector v = <1.0,1.0,1.0> * <f,f,f>;
^Z
Gen.g: node from line 2:28 mismatched tree node: f expecting FLOAT_LITERAL

Turning off memoization fixes the issue.

The grammar fragments involved are (trying to cut down as much as I can):

expression
@init {MyAst t = (MyAst )input.LT(1);}
@after { $expression.st = DoPromotion(t, $expression.st); }
: ^(EXPR expr) -> {$expr.st}
;

expr
: multiplicativeExpression-> {$multiplicativeExpression.st} ;

multiplicativeExpression
: mult -> {$mult.st}
| primary -> {$primary.st}
;

mult
: ^(op='*' l=multiplicativeExpression r=multiplicativeExpression)
->
mul(subtemplate={TemplateMapping.Multiplication[$l.start.evalType.TypeIndex,
$r.start.evalType.TypeIndex]}, lexpr={$l.st}, rexpr={$r.st}) ; primary @init
{MyAst t = (MyAst)input.LT(1);} @after { $primary.st = DoPromotion(t,
$primary.st); }
| vecConst -> {$vecConst.st}
| vecLiteral -> {$vecLiteral.st}
| expression -> {$expression.st}
;

vecConst
: ^(VECTOR_LITERAL x=FLOAT_LITERAL y=FLOAT_LITERAL z=FLOAT_LITERAL) ->
vconst(x={$x.text}, y={$y.text}, z={$z.text}) ;

vecLiteral
: ^(VECTOR_LITERAL x=expr y=expr z=expr) -> buildvec(x={$x.st}, y={$y.st},
z={$z.st}) ;

Sorry for the verbosity of this post, and thank you ahead of time for any
help.
--
David Daeschler

List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to