[antlr-interest] Scopes and C runtime

Gavin Lambert antlr at mirality.co.nz
Tue Dec 5 23:34:01 PST 2006


In 3.0b5 (using the C runtime included with that version), if I 
try using a global named scope then ANTLR throws an exception 
while generating the parser.

eg:
grammar Message;
options {
   language = C;
}
scope MessageData {
   enum MessageType msgType;
}
// ...
messageDefn
scope MessageData;
   : someRule | someOtherRule
   ;

This goes away if I remove the reference to the scope in the 
rule.  And dynamic scopes appear to work fine.  Below is the error 
that this produces:

error(10):  internal error: Class java.lang.String has no such 
attribute: name in template context [outputFile parser 
genericParser(...) rule ruleInitializations anonymous <invoke 
scopeTop arg context>] : java.lang.NoSuchFieldException: name
java.lang.Class.getField(Unknown Source)
org.antlr.stringtemplate.language.ASTExpr.rawGetObjectProperty(ASTExpr.java:489)
org.antlr.stringtemplate.language.ASTExpr.getObjectProperty(ASTExpr.java:385)
org.antlr.stringtemplate.language.ActionEvaluator.attribute(ActionEvaluator.java:351)
org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:136)
org.antlr.stringtemplate.language.ActionEvaluator.argumentAssignment(ActionEvaluator.java:905)
org.antlr.stringtemplate.language.ActionEvaluator.argList(ActionEvaluator.java:850)
org.antlr.stringtemplate.language.ASTExpr.evaluateArguments(ASTExpr.java:790)
org.antlr.stringtemplate.language.ASTExpr.getTemplateInclude(ASTExpr.java:609)
org.antlr.stringtemplate.language.ActionEvaluator.templateInclude(ActionEvaluator.java:470)
org.antlr.stringtemplate.language.ActionEvaluator.expr(ActionEvaluator.java:142)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:84)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:666)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:687)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:624)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:666)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:624)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:666)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:687)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:624)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:666)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:624)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:666)
org.antlr.stringtemplate.language.ASTExpr.writeAttribute(ASTExpr.java:624)
org.antlr.stringtemplate.language.ActionEvaluator.action(ActionEvaluator.java:86)
org.antlr.stringtemplate.language.ASTExpr.write(ASTExpr.java:138)
org.antlr.stringtemplate.StringTemplate.write(StringTemplate.java:792)
org.antlr.stringtemplate.StringTemplate.toString(StringTemplate.java:1727)
org.antlr.codegen.CodeGenerator.write(CodeGenerator.java:1083)
org.antlr.codegen.CTarget.genRecognizerFile(CTarget.java:53)
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:429)
org.antlr.Tool.processGrammar(Tool.java:329)
org.antlr.Tool.process(Tool.java:266)
org.antlr.Tool.main(Tool.java:69)



More information about the antlr-interest mailing list