[antlr-interest] Fwd: Grammar Problem
Thomas Jackson
thomas.jackson.iii at gmail.com
Fri Oct 12 07:32:25 PDT 2007
Sorry if this is a duplicated message, my first one seemed not to go
through...
[09:45:02] java.lang.NullPointerException
at org.antlr.tool.ActionAnalysisLexer.mX_Y(ActionAnalysisLexer.java:139)
at org.antlr.tool.ActionAnalysisLexer.mTokens(ActionAnalysisLexer.java
:323)
at org.antlr.tool.ActionAnalysisLexer.nextToken (
ActionAnalysisLexer.java:69)
at org.antlr.tool.ActionAnalysisLexer.analyze(ActionAnalysisLexer.java
:43)
at org.antlr.tool.Grammar.examineAllExecutableActions(Grammar.java:1283)
at org.antlr.tool.Grammar.setGrammarContent (Grammar.java:567)
at org.antlr.tool.Grammar.setGrammarContent(Grammar.java:497)
at org.antlr.works.grammar.EngineGrammar.createNewGrammar(Unknown
Source)
at org.antlr.works.grammar.EngineGrammar.createParserGrammar (Unknown
Source)
at org.antlr.works.grammar.EngineGrammar.createGrammars(Unknown Source)
at org.antlr.works.grammar.EngineGrammar.analyze(Unknown Source)
at org.antlr.works.grammar.CheckGrammar.run(Unknown Source)
at java.lang.Thread.run(Thread.java:595)
In generating a tree grammar in ANTLRWorks I get a messagebox that pops up
with the following error.
Does anyone know of what things could cause this? Grammar is below....
Thanks
Thomas
tree grammar TSLtw;
options {
tokenVocab=TSL;
ASTLabelType=CommonTree;
output=template;
}
@header {
package com.microfocus.kenly.tsl;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.List;
}
@members {
private File _fOutDir;
public void setOutputDirectory(File fOutDir) throws
IllegalArgumentException
{
_fOutDir = fOutDir;
if(!_fOutDir.exists())
_fOutDir.mkdirs();
if(!_fOutDir.isDirectory())
throw new IllegalArgumentException();
}
}
generate
: type+
;
type
scope{
File dirPackage;
String baseType;
List<String> imports
}
@init
{
$type::dirPackage = null;
$type::baseType = null;
$type::imports = new ArrayList<String>();
}
: ^(TYPE ^(ID pr=packageRule) parent description (p+=property)*)
{
try
{
StringTemplate fileNameTemplate =
%filename(basename={$ID.text});
StringTemplate packageNameTemplate =
%filename(basename={$ID.text});
File fDir = $type::dirPackage != null ? $type::dirPackage :
_fOutDir;
if(!fDir.exists())
fDir.mkdirs();
File f = new File(fDir, fileNameTemplate.toString());
PrintWriter wtr = new PrintWriter(new FileWriter(f));
StringTemplate typeTemplate = %type(name={$ID.text},
basetype={$parent.st}, desc={$description.st}, props={$p});
StringTemplate fileTemplate = %file();
fileTemplate.setAttribute("class", typeTemplate.toString());
fileTemplate.setAttribute("packagename", pr.toString());
fileTemplate.setAttribute("imports", $type::imports);
wtr.println(fileTemplate.toString());
wtr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
;
packageRule
: ^(PACKAGE ids+=ID+)
{
StringTemplate packageDir = %dirname(vals={$ids});
String absolutePath =
_fOutDir.getAbsolutePath()+"/"+packageDir.toString();
$type::dirPackage = new File(absolutePath);
}
-> packagename(vals={$ids})
;
parent
: ^(PARENT ID) -> extend(name={$ID.text})
| PARENT -> { %{"\\none"} }
;
property
scope{ String propertyName }
: ^(PROP n=ID {$property::propertyName=$n.text; } t=propertytype) ->
property(prop={$t.st})
;
classtype
: ^(n=ID ^(PACKAGE p+=ID+ ))
{
StringTemplate importSt = %import(package={$p}, classname={$n});
$type::imports.add(importSt.toString());
} -> {%{$n.text}}
;
propertytype
: ^(CLASS classtype) -> class(name={$property::propertyName},
type={$classtype.st})
| ^(LIST classtype) -> list(name={$property::propertyName},
type={$classtype.st})
| ^(ENUM vals+=ID+) -> enum(name={$property::propertyName},
vals={$vals})
;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20071012/cf62e440/attachment.html
More information about the antlr-interest
mailing list