Tenaja,

The option of which you are thinking is "target", not "output".  The 
target option specifies the language for which you would like the parser 
to be generated; the output option specifies the type of information 
produced by a call to one of the functions in the generated code.

I am not familiar with any five minute intro that would give you the 
information you want other than the ANTLR book I mentioned in the 
previous e-mail.  The following might help, but please bear in mind that 
this is all off of the top of my head.  :)

So consider the grammar

     grammar Simple;
     options { target=Java; }
     program: decl*;
     decl: IDENTIFIER '{' statement* '}';
     statement: '+' | '-';
     IDENTIFIER: ('a'..'z')*;
     WS: ('\n' | '\r' | '\t' | ' ')* { skip(); } ;

This grammar would recognize any of the following code:

     foo { + - - + }
     bar { - + }

     stuff { + + + }

but it wouldn't produce any output; that is, the SimpleParser.program() 
method has a void return.  If you want output, you have to specify it in 
the grammar.  Consider the following rewrite:

     grammar Simple;
     options { target=Java; output=AST; }
     tokens { PROG; DECL; }
     program: decl* -> ^(PROG decl*);
     decl: IDENTIFIER '{' statement* '}' -> ^(DECL statement*);
     statement: '+' | '-';
     IDENTIFIER: ('a'..'z')*;
     WS: ('\n' | '\r' | '\t' | ' ')* { skip(); } ;

Now, the SimpleParser.program() method will have a return value of a 
type generated by ANTLR.  That type will have a public member named 
"tree".  By default, tree has type Object but actually contains a 
CommonTree; that CommonTree is a homogenously-typed AST which contains 
the parse of the input.  There are also instructions on the ANTLR site 
for causing the grammar to produce heterogeneously-typed ASTs.

In the project on which I am working, we have to create nodes through a 
factory.  As a result, we went with an alternative approach: manually 
controlling the output of the grammar rules.  Our rules look something 
like this:

     fieldDeclaration returns [FieldDeclarationNode ret]
         :
             fieldModifiers
             type
             variableDeclarators
             ';'
             {
                 $ret = factory.makeFieldDeclarationNode(
                         $fieldModifiers.ret, $type.ret, 
$variableDeclarators.ret);
             }
         ;

Does this answer your question about using the output of the ANTLR parser?

In terms of licensing, I would expect that the generated parser is not 
covered by the BSD license unless the original grammar file is covered 
by the BSD license.  I have this impression for the same reason that the 
exported PNG from a Microsoft Visio document isn't subject to any 
licensing restrictions from the Visio software itself; it's merely 
subject to restrictions which were on the original .vsd file.  But I 
could be wrong about this; you'd have to ask the more lawyer-y people on 
the list to be sure.

Cheers,

Zach
> Zach,
> Thank you for responding. I think maybe my inquiry was unclear. I've read the 
> "five minute intro..." and have used antlr to process several samples, 
> producing code in Java, C, C#, etc,. (It's very simple...) Unless the 
> output=AST is different from those output commands (output = csharp), it is 
> probably not what I'm interested in.
>   
> What I'm looking for is a 5-minute tutorial on using the output; for 
> instance, sending a file to the compiled C# output, and having that C# code 
> process the text file and  generate a result. My end goal is a simple 
> compiler to produce some Intermediate Representation (Three-Address, or 
> PCode, etc).
>   
> ...
> On another topic, regarding the BSD license, since this is the first time 
> I've worked with o/s code generation tools.
> .....The non-C output does not include a copy of it.
> .....The C output includes the BSD notice at the top.
> So, does that mean that I'm free to compile and distribute binary forms of 
> Java&  C# output code without the license, but not C? Does that mean the only 
> requirements for distributing the C in binary form are to put it in an About 
> box, or something equivelant? Why would the C output require it, but not the 
> other languages? I may eventually turn this into a commercial product so I'd 
> like to know how much disclosure is required.
>   
> Thanks!!!
>
> --- On Sun, 11/7/10, Zachary Palmer<[email protected]>  wrote:
>
>
> From: Zachary Palmer<[email protected]>
> Subject: Re: [antlr-interest] Tutorial... actuala use?
> To: [email protected]
> Date: Sunday, November 7, 2010, 5:16 PM
>
>
> Tenaja,
>
> By default, the generated ANTLR grammar is just a recognizer: it will
> throw an exception in the presence of a string not in the grammar and it
> will terminate normally in the presence of a string in the grammar.  To
> get more output from ANTLR (such as an AST), you probably want to set
> "output=..." in the options section of your grammar.  For an informal
> discussion of "output=AST", try
> http://www.antlr.org/wiki/display/ANTLR3/Tree+construction .  For more
> detailed information, there is a relatively inexpensive book ("The
> Definitive ANTLR Reference") that you can buy in electronic form.
>
> For more examples, you might try taking a glance at some of the grammars
> on the ANTLR site (http://www.antlr.org/grammar/list).  There's also a
> somewhat non-standard approach that I've been forced to use (due to some
> strange constraints in my project) which is illustrated by the ANTLR
> grammar used in a branch of the OpenJDK project in which each rule
> explicitly returns the values that it needs (which are then set by
> grammar actions).
>
> Cheers,
>
> Zach
>    
>> I'm familiar with bnf (etc) files, and have written a simple r/d compiler 
>> myself. I'm looking at antlr for expanding, and for maintenance reason. As 
>> such, I'd like to put together one of my simple bnf languages and view the 
>> output. I've seen a few antlr tutorials, but haven't found one that really 
>> describes the compiled code output (not the antlr output, but what a 
>> compiled exe or java file output produces).
>>     
>> So... can someone point me to a tutorial that shows what to do AFTER you 
>> compile the anltr-generated file?
>>     
>> Thanks!
>> Tenaja
>>
>>
>>
>>
>> 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
>
>
>
>
>
> 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