Now outputs headers a bit as well as code.

This commit is contained in:
David Sisson 2015-06-30 17:17:34 -07:00
parent 363b640949
commit fccf0b4036
3 changed files with 70 additions and 1 deletions

View File

@ -1046,4 +1046,25 @@ initValue(typeName) ::= <<
<cppTypeInitMap.(typeName)> <cppTypeInitMap.(typeName)>
>> >>
headerFile(file, parser, namedActions) ::= <<
FOOM1
>>
parserHeaderFile(file, parser, namedActions) ::= <<
FOOM2
>>
visitorHeaderFile(file, parser, namedActions) ::= <<
FOOM3
>>
ParserHeaderFile(file, parser, namedActions) ::= <<
FOOM4
>>
VisitorHeaderFile(file, parser, namedActions) ::= <<
FOOM5
>>
codeFileExtension() ::= ".cpp" codeFileExtension() ::= ".cpp"
headerFileExtension() ::= ".h"

View File

@ -203,7 +203,7 @@ public class CodeGenerator {
if ( fileName==null ) return; if ( fileName==null ) return;
if ( getTemplates().isDefined("headerFile") ) { if ( getTemplates().isDefined("headerFile") ) {
ST extST = getTemplates().getInstanceOf("headerFileExtension"); ST extST = getTemplates().getInstanceOf("headerFileExtension");
ST headerFileST = null; ST headerFileST = getTemplates().getInstanceOf("headerFile");
// TODO: don't hide this header file generation here! // TODO: don't hide this header file generation here!
getTarget().genRecognizerHeaderFile(g,headerFileST,extST.render(lineWidth)); getTarget().genRecognizerHeaderFile(g,headerFileST,extST.render(lineWidth));
} }
@ -298,4 +298,39 @@ public class CodeGenerator {
String recognizerName = g.getRecognizerName(); String recognizerName = g.getRecognizerName();
return recognizerName+extST.render(); return recognizerName+extST.render();
} }
public String getRecognizerHeaderFileName() {
ST extST = getTemplates().getInstanceOf("headerFileExtension");
if ( extST==null ) return null;
String recognizerName = g.getRecognizerName();
return recognizerName+extST.render();
}
public String getListenerHeaderFileName() {
ST extST = getTemplates().getInstanceOf("headerFileExtension");
if ( extST==null ) return null;
String listenerName = g.name + "Listener";
return listenerName+extST.render();
}
public String getVisitorHeaderFileName() {
ST extST = getTemplates().getInstanceOf("headerFileExtension");
if ( extST==null ) return null;
String visitorName = g.name + "Visitor";
return visitorName+extST.render();
}
public String getBaseListenerHeaderFileName() {
assert g.name != null;
ST extST = getTemplates().getInstanceOf("headerFileExtension");
String visitorName = g.name + "BaseListener";
return visitorName+extST.render();
}
public String getBaseVisitorHeaderFileName() {
assert g.name != null;
ST extST = getTemplates().getInstanceOf("headerFileExtension");
String visitorName = g.name + "BaseVisitor";
return visitorName+extST.render();
}
} }

View File

@ -30,7 +30,9 @@
package org.antlr.v4.codegen; package org.antlr.v4.codegen;
import org.antlr.v4.tool.Grammar;
import org.antlr.v4.tool.ast.GrammarAST; import org.antlr.v4.tool.ast.GrammarAST;
import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.STGroup; import org.stringtemplate.v4.STGroup;
import org.stringtemplate.v4.StringRenderer; import org.stringtemplate.v4.StringRenderer;
@ -70,6 +72,10 @@ public class CppTarget extends Target {
super(gen, "Cpp"); super(gen, "Cpp");
} }
public String getVersion() {
return "4.1";
}
public Set<String> getBadWords() { public Set<String> getBadWords() {
if (badWords.isEmpty()) { if (badWords.isEmpty()) {
addBadWords(); addBadWords();
@ -200,4 +206,11 @@ public class CppTarget extends Target {
result.registerRenderer(String.class, new StringRenderer(), true); result.registerRenderer(String.class, new StringRenderer(), true);
return result; return result;
} }
// MEGAHACK -- Make it so we can have different header filenames for the three types of files -- recognizer, listener, visitor.
@Override
protected void genRecognizerHeaderFile(Grammar grammar, ST headerFileST, String extName) {
String fileName = getCodeGenerator().getRecognizerHeaderFileName();
getCodeGenerator().write(headerFileST, fileName);
}
} }