[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