[antlr-interest] Objective-C tree grammars with 3.0.1

Basil Shkara bshkara at gmail.com
Sat Nov 10 23:13:08 PST 2007


I ran an example tree grammar and set the language option to ObjC and  
it generated fine so I guess that answers my previous question about  
whether ANTLR supports tree grammars for objective-c.

However I still do not understand why my particular grammar is not  
able to be generated.  I am going through Terence's book (Definitive  
ANTLR reference) and converting the java examples to objective-c  
progressively.  So far I have been able to write and generate  
everything except for the tree grammar.

The grammar I have been trying to generate is below.

Any ideas?

Thanks!

tree grammar Eval;

options
{
	tokenVocab=Expr;
     language=ObjC;
     ASTLabelType = ANTLRCommonTree;
}

@header {
	NSMutableDictionary *aDictionary;
}

@init {
	aDictionary = [[NSMutableDictionary alloc] init];
}

expr returns [NSString *value]
		:	^('+' a=expr b=expr)	{$value = a+b;}
		|	^('-' a=expr b=expr)	{$value = a-b;}
		|	^('*' a=expr b=expr)	{$value = a*b;}
		|	ID
			{
				// look up value of variable
				NSString *v = [aDictionary objectForKey:$ID.text];
				// if found, set return value, else error
				if (v != nil) {
					$value = v;
				} else {
					NSLog(@"undefined variable: \%@", $ID.text);
				}
			}
		|	INT		{$value = $INT.text;}
		;

prog	:	stat+;

stat	:	expr
			{NSLog(@"\%@", $expr.value);}
		|	^('=' ID expr)
			{[aDictionary setObject:$expr.value forKey:$ID.text];}
		;

On 10/11/2007, at 11:57 PM, Basil Shkara wrote:

> Hi,
>
> I have built an AST and am currently trying to generate my tree  
> grammar but when I run the antlr tool, I get the below errors.
> I haven't defined an ASTLabelType.  From my understanding it would  
> be ANTLRCommonTree however entering that causes xcode to fail on  
> build because the generated code does not correctly insert pointers.
> In any case, I do not think that is the issue.
> Does v3.0.1 contain objective-c support for generating tree grammars?
> Any help appreciated!
>
> Thanks!
>
> warning(152): Eval.g:0:0: tree grammar Eval has no ASTLabelType option
> error(10):  internal error: Eval.g :  
> java.util.NoSuchElementException: no such attribute:  
> ANTLRASTLabelType in template context [outputFile treeParser  
> genericParser(...) rule ruleLabelDefs anonymous <treeParser's arg  
> labelType default value subtemplate>]
> org 
> .antlr 
> .stringtemplate 
> .StringTemplate 
> .checkNullAttributeAgainstFormalArguments(StringTemplate.java:1290)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:814)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:812)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:812)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:812)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:812)
> org.antlr.stringtemplate.StringTemplate.get(StringTemplate.java:812)
> org 
> .antlr 
> .stringtemplate.StringTemplate.getAttribute(StringTemplate.java:696)
> org 
> .antlr 
> .stringtemplate 
> .language.ActionEvaluator.attribute(ActionEvaluator.java:355)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java: 
> 131)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 79)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:742)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:722)
> org 
> .antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java: 
> 659)
> org 
> .antlr 
> .stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java: 
> 81)
> org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:152)
> org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:714)
> org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1132)
> org.antlr.codegen.Target.genRecognizerFile(Target.java:94)
> org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:439)
> org.antlr.Tool.processGrammar(Tool.java:347)
> org.antlr.Tool.process(Tool.java:268)
> org.antlr.Tool.main(Tool.java:70)
>



More information about the antlr-interest mailing list