Here are some snippets from a tree parser using option output=template:
Straight creation from a rewrite and list:
statements
: s+=statement_comment*
-> statements(stats={$s})
;
Just passing a result up the rule chain (don't have rules return an empty $st):
ruleDefinition
: ^(RULE
statements
)
{
$st = $statements.st;
}
;
>From a rule reference:
statement_comment
: ^(STATEMENT statement
(
STAT_COMMENT
->line(stat={$statement.st}, comment={$STAT_COMMENT.text})
...
In an action:
| COMMENT
{
// Get rid of leading spaces and the ' character, generate the comment line
//
$st = %lineComment(comment={$COMMENT.text.trim().substring(1)});
}
Calling some Java code that returns a StringTemplate using return elements from
a rule reference:
...
{
// Ask the code generator to deal with the assignment
//
$st = codeGen.assign($v.st, $v.symbol, $expression.st, $expression.symbol,
$expression.type);
}
...
Creating a template that is named from the value of a terminal and setting
attributes of the StringTemplate in actions:
callStatement
@init {
Function f;
}
: ^(CALL
id=IDENTIFIER
{
$st = %({$id.text})();
f = (Function)localSymbols.lookup($id.text);
%{$st}.instr=f.getInstruction();
}
...
Setting the template before invoking the tree walker (or parser):
/**
* The String Template group loader object, which knows where and how
* to instantiate templates for us.
*/
protected StringTemplateGroupLoader loader;
/**
* The string template that is used for code generation of the main file
*/
protected StringTemplate theFile;
loader = new CommonGroupLoader(templateDirs.toString(), null);
StringTemplateGroup.registerGroupLoader(loader);
StringTemplateGroup.registerDefaultLexer(AngleBracketTemplateLexer.class);
templates = StringTemplateGroup.loadGroup("rtfm");
... // create parser/AST walker etc ...
codeGen.setTemplateLib(templates);
By the way - all these things are right there in TDAR - you need only read
about 5 or 6 pages. I think it took me longer to format this than it would to
read that section of the book.
For your grammar:
grammar rtfm;
options { output=AST; }
tokens { RTFM; }
a: h=HELLO ->^(RTFM $h);
HELLO : 'hello' ;
AST:
tree grammar rtfmtree;
options { output=template; tokenVocab=rtfm; }
a: ^(RTFM HELLO) -> rtfm(hello={$HELLO.text})
Template:
group rtfm;
rtfm(hello) ::=
<<
<hello>, please take the time to RTFM instead of asking for people to do it for
you.
>>
Just finish work a little early tonight, skip the bar, don't turn on the TV or
the computer and read TDAR. You'll be done by 10:30PM and the next day you will
be able to do the work.
Jim (off to the bar because I did all the reading already ;-) )
From: [email protected]
[mailto:[email protected]] On Behalf Of Naveen Chawla
Sent: Monday, October 26, 2009 11:50 AM
To: Indhu Bharathi
Cc: ANTLR Interest Mailing List; Terence Parr
Subject: Re: [antlr-interest] Can somebody give me the very simplest example of
grammar to AST to StringTemplate output
I sounded rude! You are all legends, I just didn't want to delve into the
C/Java bytecode yet, just in order to learn the basic syntax. It's the basic
syntax is all I need right now, hence my request for an example translator of
"hi" -> "hello", and I can't find it "bunched together" as such.
Many thanks,
N
2009/10/26 Naveen Chawla <[email protected]>
Sorry if I sound rushed, I'm doing so many other things as well.
Regards, N
2009/10/26 Naveen Chawla <[email protected]>
I can't open the "tpantlr-code" file in that archive, for some reason. Can
somebody give me, for example "a: 'hello'; ", just that single symbol grammar,
then making an AST from it, then a Tree grammar, and using StringTemplate to
output "hi" from it. I can't find such a simple example anywhere. i.e. "hi" ->
"hello". Surely someone who has used the features many times would take just a
few seconds even from memory.
2009/10/24 Indhu Bharathi <[email protected]>
Section 9.6 of ANTLR definitive reference (Building a Java Bytecode Generator
Using a Tree Grammar and Templates) does this.
The free code samples are available at
http://media.pragprog.com/titles/tpantlr/code/tpantlr-code.tgz
Samples for this specific section is available at 'Code/templates/generator'
inside the archive.
The book has a very good explanation too.
Cheers, Indhu
From: [email protected]
[mailto:[email protected]] On Behalf Of Naveen Chawla
Sent: Saturday, October 24, 2009 9:11 AM
To: Terence Parr
Cc: ANTLR Interest Mailing List
Subject: Re: [antlr-interest] Can somebody give me the very simplest example of
grammar to AST to StringTemplate output
No, where?
Many thanks, N
2009/10/23 Terence Parr <[email protected]>
have you looked at the (free) code for both books?
Ter
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address