[antlr-interest] ANTLR StringTemplate interface.
rkevinburton at charter.net
rkevinburton at charter.net
Thu Jul 31 14:56:33 PDT 2008
I am really new to ANTLR and so am even newer to StingTemplates. I decided to cut and paste my tree grammar to use templates. Terrance says that StingTemplates are better than print statements so I thought I would try.
Needless to say it didn't work. The generated files from the grammar would not compile.
Here is the opening of my template grammar:
tree grammar ECMAScriptTemplate ;
options
{
output = template;
tokenVocab = ECMAScript ;
language = CSharp2 ;
}
And the template rewrite rultes that I am dealing with right now look like:
functionDeclaration
: ^( FUNCTION Identifier? LPAREN (fa+=functionArguments)* RPAREN block )
-> template(name={$Identifier.text}, args={$fa.st})
"<name>(<args; separator=\", \">)"
;
functionArguments
: ^( ARGS name=Identifier )
-> template(argument={$name}) "<argument>"
| ^( ARGS name=Identifier TYPES type=Identifier )
-> template(argument={$name}, type={$type}) "<argument> <type>"
;
Basically thiis grammar parses a JavaScript input with one modification. I have added suggested types to the arugment list. The tree walker and parser both are very happy right now. I am trying to get the StringTemplate to work. The above should recognize 'function a(b,c)' as well as 'function a(b:B,c)' where B is a type. Naturally I would like to build a template that "fills" in the argument list with types or not. As it sits now when code generated with the above statements I get:
// TEMPLATE REWRITE
// 220:11: -> template(name=$Identifier.textargs=$fa.st) \"<name>(<args; separator=\", \">)\"
{
retval.ST = new StringTemplate(templateLib, "<name>(<args; separator=\", \">)",
new STAttrMap().Add("name", ((Identifier1 != null) ? Identifier1.Text : null)).Add("args", list_fa.st));
}
'object' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
Any ideas what is wrong?
Thank you.
Kevin
More information about the antlr-interest
mailing list