[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi/scripts GenerateMessages.py GenMsgJava.py...
From: |
certi-cvs |
Subject: |
[certi-cvs] certi/scripts GenerateMessages.py GenMsgJava.py... |
Date: |
Sat, 06 Mar 2010 12:55:10 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 10/03/06 12:55:10
Modified files:
scripts : GenerateMessages.py GenMsgJava.py GenMsgBase.py
GenMsgAST.py GenMsgPython.py GenMsgCXX.py
Log message:
More modular backend generator
Add an example with the C++ Message/NetworkMessage Generators
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgJava.py?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgBase.py?cvsroot=certi&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgAST.py?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgPython.py?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgCXX.py?cvsroot=certi&r1=1.3&r2=1.4
Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- GenerateMessages.py 5 Mar 2010 13:57:08 -0000 1.32
+++ GenerateMessages.py 6 Mar 2010 12:55:10 -0000 1.33
@@ -19,7 +19,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenerateMessages.py,v 1.32 2010/03/05 13:57:08 erk Exp $
+## $Id: GenerateMessages.py,v 1.33 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -81,7 +81,8 @@
generatorBackends = dict()
generatorBackends[GenMsgBase.MsgSpecGenerator.generatorName().lower()] =
GenMsgBase.MsgSpecGenerator
-generatorBackends[GenMsgCXX.CXXGenerator.generatorName().lower()] =
GenMsgCXX.CXXGenerator
+generatorBackends[GenMsgCXX.CXXCERTIMessageGenerator.generatorName().lower()]
= GenMsgCXX.CXXCERTIMessageGenerator
+generatorBackends[GenMsgCXX.CXXCERTINetworkMessageGenerator.generatorName().lower()]
= GenMsgCXX.CXXCERTINetworkMessageGenerator
generatorBackends[GenMsgPython.PythonGenerator.generatorName().lower()] =
GenMsgPython.PythonGenerator
generatorBackends[GenMsgJava.JavaGenerator.generatorName().lower()] =
GenMsgJava.JavaGenerator
@@ -102,12 +103,13 @@
usage()
sys.exit(2)
-# default value
-verbose=False
-factoryOnly=False
-gentype="header"
-language=GenMsgBase.MsgSpecGenerator.generatorName()
-output=sys.stdout
+# default values for command line options
+verbose = False
+factoryOnly = False
+gentype = "header"
+language = GenMsgBase.MsgSpecGenerator.generatorName()
+output = sys.stdout
+inputFile = None
# Parse command line options
for o, a in opts:
@@ -506,13 +508,17 @@
parser = ply.yacc.yacc(debug=True)
parser.logger = parserlogger
-mainlogger.info("Parsing message file specifications...")
-try:
+if inputFile != None:
+ mainlogger.info("Parsing message file specifications...")
+ try:
msgFile = open(inputFile,'r')
-except IOError, e:
+ except IOError, e:
mainlogger.error("IOError raised: <"+str(e)+">")
mainlogger.error("May be input file <%s> is unreadable or mispelled?" %
inputFile)
sys.exit()
+else:
+ mainlogger.error("No input file given!!")
+ sys.exit()
lexer.lineno = 1
parser.AST = GenMsgAST.MessageAST(inputFile)
Index: GenMsgJava.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgJava.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- GenMsgJava.py 4 Mar 2010 09:28:30 -0000 1.1
+++ GenMsgJava.py 6 Mar 2010 12:55:10 -0000 1.2
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
## ----------------------------------------------------------------------------
## CERTI - HLA RunTime Infrastructure
## Copyright (C) 2002-2005 ONERA
@@ -19,7 +17,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenMsgJava.py,v 1.1 2010/03/04 09:28:30 erk Exp $
+## $Id: GenMsgJava.py,v 1.2 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -41,9 +39,6 @@
def __init__(self, MessageAST):
super(JavaGenerator, self).__init__(MessageAST, "//")
- self.logger = logging.Logger("JavaGenerator")
- self.logger.setLevel(logging.ERROR)
- self.logger.addHandler(logging.StreamHandler(sys.stdout))
# Message builtin type to Java type
# Note that java integer type are ALL signed:
#
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html
Index: GenMsgBase.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgBase.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- GenMsgBase.py 5 Mar 2010 18:15:35 -0000 1.3
+++ GenMsgBase.py 6 Mar 2010 12:55:10 -0000 1.4
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
## ----------------------------------------------------------------------------
## CERTI - HLA RunTime Infrastructure
## Copyright (C) 2002-2005 ONERA
@@ -19,7 +17,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenMsgBase.py,v 1.3 2010/03/05 18:15:35 erk Exp $
+## $Id: GenMsgBase.py,v 1.4 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -48,7 +46,7 @@
def __init__(self,MessageAST,commentLineBeginWith):
self.AST = MessageAST
self.commentLineBeginWith = commentLineBeginWith
- self.logger = logging.Logger("CodeGenerator")
+ self.logger = logging.Logger(self.generatorName()+"Generator")
self.logger.setLevel(logging.ERROR)
self.logger.addHandler(logging.StreamHandler(sys.stdout))
self.__indentString = " "
Index: GenMsgAST.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgAST.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- GenMsgAST.py 5 Mar 2010 18:15:35 -0000 1.2
+++ GenMsgAST.py 6 Mar 2010 12:55:10 -0000 1.3
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
## ----------------------------------------------------------------------------
## CERTI - HLA RunTime Infrastructure
## Copyright (C) 2002-2005 ONERA
@@ -19,7 +17,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenMsgAST.py,v 1.2 2010/03/05 18:15:35 erk Exp $
+## $Id: GenMsgAST.py,v 1.3 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
Index: GenMsgPython.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgPython.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- GenMsgPython.py 4 Mar 2010 09:28:30 -0000 1.1
+++ GenMsgPython.py 6 Mar 2010 12:55:10 -0000 1.2
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
## ----------------------------------------------------------------------------
## CERTI - HLA RunTime Infrastructure
## Copyright (C) 2002-2005 ONERA
@@ -19,7 +17,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenMsgPython.py,v 1.1 2010/03/04 09:28:30 erk Exp $
+## $Id: GenMsgPython.py,v 1.2 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -41,8 +39,5 @@
def __init__(self,MessageAST):
super(PythonGenerator,self).__init__(MessageAST,"##")
- self.logger = logging.Logger("PythonGenerator")
- self.logger.setLevel(logging.ERROR)
- self.logger.addHandler(logging.StreamHandler(sys.stdout))
# Message builtin type to Python type
\ No newline at end of file
Index: GenMsgCXX.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgCXX.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- GenMsgCXX.py 5 Mar 2010 18:15:35 -0000 1.3
+++ GenMsgCXX.py 6 Mar 2010 12:55:10 -0000 1.4
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
## ----------------------------------------------------------------------------
## CERTI - HLA RunTime Infrastructure
## Copyright (C) 2002-2005 ONERA
@@ -19,7 +17,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenMsgCXX.py,v 1.3 2010/03/05 18:15:35 erk Exp $
+## $Id: GenMsgCXX.py,v 1.4 2010/03/06 12:55:10 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -32,7 +30,7 @@
import sys
import os
-class CXXGenerator(GenMsgBase.CodeGenerator):
+class CXXCERTIGenerator(GenMsgBase.CodeGenerator):
"""
This is a C++ generator for C{MessageAST}.
@@ -44,10 +42,7 @@
def __init__(self,MessageAST):
- super(CXXGenerator,self).__init__(MessageAST,"//")
- self.logger = logging.Logger("CXXGenerator")
- self.logger.setLevel(logging.ERROR)
- self.logger.addHandler(logging.StreamHandler(sys.stdout))
+ super(CXXCERTIGenerator,self).__init__(MessageAST,"//")
self.included = dict()
self.typedefed = dict()
self.builtinTypeMap = {'onoff' : 'bool',
@@ -93,6 +88,7 @@
'float' : 'read_float',
'double' : 'read_double',}
self.__languageName="C++"
+ self.replacePrefix = None
def getRepresentationFor(self,name):
for native in self.AST.natives:
@@ -259,8 +255,8 @@
# add include coming from native type specification
stream.write(self.commentLineBeginWith+" ****-**** Includes coming
from native types ****-****\n")
for native in self.AST.natives:
- if native.hasLanguage(self.generatorName()):
- for line in native.getLanguageLines(self.generatorName()):
+ if native.hasLanguage("CXX"):
+ for line in native.getLanguageLines("CXX"):
# we are only interested in native "include" statement
stmt = line.statement
if stmt.find("#include")>=0 and (not stmt in
self.included.keys()):
@@ -280,8 +276,8 @@
stream.write(self.getIndent()+self.commentLineBeginWith)
stream.write(" - with typedef (see below [if any])\n")
for native in self.AST.natives:
- if native.hasLanguage(self.generatorName()):
- for line in native.getLanguageLines(self.generatorName()):
+ if native.hasLanguage("CXX"):
+ for line in native.getLanguageLines("CXX"):
stmt = line.statement
# we are only interested in native statement
# which are not #include
@@ -552,8 +548,8 @@
stream.write(self.getIndent() + "switch (type) {\n")
self.indent()
for e in self.AST.eMessageType.values:
- #stream.write(self.getIndent()+"case %s::%s:\n" %
(creator[0],e.name))
- stream.write(self.getIndent()+"case %s::%s:\n" %
(creator[0],e.name.replace("M_","",1)))
+ if (None!=self.replacePrefix):
+ stream.write(self.getIndent()+"case %s::%s:\n" %
(creator[0],e.name.replace(self.replacePrefix[0],"",1)))
self.indent()
if None==e.type:
stream.write(self.getIndent()+"throw RTIinternalError(\"%s
message type should not be used!!\");\n"%e.name)
@@ -621,8 +617,8 @@
self.indent()
# Assign my name.
stream.write(self.getIndent()+"this->messageName =
\""+msg.name+"\";\n")
- #stream.write(self.getIndent()+"this->type =
"+msg.name.upper().replace("NM_","NetworkMessage::")+";\n")
- stream.write(self.getIndent()+"this->type =
"+msg.name.upper().replace("M_","Message::",1)+";\n")
+ if (None!=self.replacePrefix):
+ stream.write(self.getIndent()+"this->type =
"+msg.name.upper().replace(self.replacePrefix[0],self.replacePrefix[1],1)+";\n")
# Write init value if any was provided
if len(msg.fields)>0:
self.applyToFields(stream, msg.fields,
self.writeInitFieldStatement)
@@ -690,4 +686,32 @@
self.closeNamespaces(stream)
+class CXXCERTIMessageGenerator(CXXCERTIGenerator):
+ """
+ This is a C++ generator for C{MessageAST}.
+
+ """
+ def generatorName(cls):
+ return "CXXCERTIMessage"
+ generatorName = classmethod(generatorName)
+
+ def __init__(self,MessageAST):
+ super(CXXCERTIMessageGenerator,self).__init__(MessageAST)
+ self.replacePrefix = list()
+ self.replacePrefix.append("M_")
+ self.replacePrefix.append("Message::")
+class CXXCERTINetworkMessageGenerator(CXXCERTIGenerator):
+ """
+ This is a C++ generator for C{MessageAST}.
+
+ """
+ def generatorName(cls):
+ return "CXXCERTINetworkMessage"
+ generatorName = classmethod(generatorName)
+
+ def __init__(self,MessageAST):
+ super(CXXCERTINetworkMessageGenerator,self).__init__(MessageAST)
+ self.replacePrefix = list()
+ self.replacePrefix.append("NM_")
+ self.replacePrefix.append("NetworkMessage::")