[antlr-interest] Tree parser

Johannes Luber jaluber at gmx.de
Fri Aug 1 07:46:06 PDT 2008


Johannes Luber schrieb:
> rkevinburton at charter.net schrieb:
>> it returns void. The rule in the grammar is:
>>
>> program
>>     : statement*
>>     ;
>>
>> Kevin
> 
> I need to look at the grammar itself. Can you send me your version 
> privately?
> 
> Johannes

Found your problem. You need to add "output=AST;" to the options, if you 
want a tree to be returned and not the input simply consumed.

Johannes

>> ---- Johannes Luber <jaluber at gmx.de> wrote:
>>> rkevinburton at charter.net schrieb:
>>>> There must be some changes to the grammar as well. The lines:
>>>>
>>>>         ECMAScriptWalker walker = new ECMAScriptWalker(nodes); 
>>>>          RuleReturnScope rs = walker.program();         
>>>> Console.Out.WriteLine(rs.Template.ToString());
>>>> It seems that my walker start rule does not return RuleReturnScope.
>>>>
>>>> Kevin
>>> What does program() return then?
>>>
>>> Johannes
>>>> ---- Johannes Luber <jaluber at gmx.de> wrote:
>>>>> rkevinburton at charter.net schrieb:
>>>>>> I would like to generate a tree parser. Unfortunateliy the ANTLR 
>>>>>> book has very little to say of the issue (or I just don't know 
>>>>>> where to look) and the sample grammars that I see seem to 
>>>>>> implement the 'walker' different from the way ANTLR does it now. 
>>>>>> For example in the CSharp grammar there is syntax like (the 
>>>>>> 'walker grammar names are different):
>>>>>>
>>>>>>                CSharpwalker = new CSharpWalker();
>>>>>>                 walker.setASTFactory(new ASTNodeFactory());
>>>>>>                 
>>>>>> CSharpParser.initializeASTFactory(walker.getASTFactory());
>>>>>>
>>>>>> where the constructor for the waler no longer takes '0' arguments. 
>>>>>> There isn't a method 'setASTFactory' and there also isn't a method 
>>>>>> 'initializedASTFactory'. If I have a TreeParser grammar how do I 
>>>>>> integrate it with the parser?
>>>>>>
>>>>>> Thank you.
>>>>>>
>>>>>> Kevin
>>>>>>
>>>>> I don't know where the syntax above comes actually from, but my own 
>>>>> tree grammar used a driver like this:
>>>>>
>>>>> CSharpParser.grammarDef_return r = parser.startRule();
>>>>> CommonTree r0 = ((CommonTree) r.tree);
>>>>> CommonTreeNodeStream nodes = new CommonTreeNodeStream(r0);
>>>>> nodes.TokenStream = tokens;
>>>>> CSharpGenerator walker = new CSharpGenerator(nodes);
>>>>> RuleReturnScope r1 = walker.startRule();
>>>>> Console.Out.WriteLine(r1.Template.ToString());
>>>>>
>>>>> Hope this helps
>>
> 



More information about the antlr-interest mailing list