[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi/scripts GenerateMessages.py
From: |
certi-cvs |
Subject: |
[certi-cvs] certi/scripts GenerateMessages.py |
Date: |
Tue, 14 Jul 2009 17:55:22 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 09/07/14 17:55:22
Modified files:
scripts : GenerateMessages.py
Log message:
Still buggy but better :-)
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.4&r2=1.5
Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- GenerateMessages.py 14 Jul 2009 17:18:23 -0000 1.4
+++ GenerateMessages.py 14 Jul 2009 17:55:22 -0000 1.5
@@ -110,7 +110,6 @@
return t
#pass
# if pass No return value. Comments are discarded
-
def t_INTEGER_VALUE(t):
r'\d+'
try:
@@ -119,7 +118,6 @@
print "Integer value too large", t.value
t.value = 0
return t
-
def t_FLOAT_VALUE(t):
r'\d+\.\d+'
try:
@@ -185,6 +183,9 @@
# pythonic getter/setter using properties
name = property(fget=getName,fset=setName,fdel=None, doc=None)
+ def hasComment(self):
+ return self.__comment!=None
+
def getComment(self):
return self.__comment
def setComment(self,comment):
@@ -224,6 +225,8 @@
return self.__enumTypeSet
enums = property(fget=__getEnumTypeSet,fset=None,fdel=None,doc=None)
+ def hasPackage(self):
+ return self.__package != None
def __getPackage(self):
return self.__package
def __setPackage(self,package):
@@ -320,6 +323,10 @@
res = "message %s " % self.name
return res
+
+ def hasMerger(self):
+ return self.merge != None
+
class MessageField(ASTElement):
""" Represents a message type
"""
@@ -329,6 +336,9 @@
self.typeid = typeid
self.defaultValue = defaultValue
+ def hasDefaultValue(self):
+ return self.defaultValue != None
+
class EnumType(ASTElement):
""" Represents an enum type
"""
@@ -522,20 +532,45 @@
def p_error(p):
print "Syntax error at '%s' on line %d column %d (token type is '%s')" %
(p.value,p.lineno,find_column(p.lexer.lexdata, p),p.type)
-
-
-if False:
- print "Trying to lex..."
- msgFile = open(messagefile,'r')
- lexer.lineno = 1
- lexer.input(msgFile.read())
- msgFile.close()
- # Tokenize
- while True:
- tok = lexer.token()
- if not tok: break # No more input
- #print tok
- print "Lex succeeded"
+class TextGenerator(object):
+ """This is a text generator"""
+ def __init__(self,MessageAST):
+ self.AST = MessageAST
+
+ def writeMultiLineComment(self,stream,ASTElement):
+ if ASTElement.hasComment():
+ for line in ASTElement.comment.lines:
+ stream.write("// ")
+ stream.write(str(line))
+ stream.write("\n")
+
+ def generate(self,stream):
+ # Generate package
+ if self.AST.hasPackage():
+ self.writeMultiLineComment(stream, self.AST.package)
+ stream.write("package %s" % self.AST.package.name)
+ # Generate enum
+ for enum in self.AST.enums:
+ self.writeMultiLineComment(stream, enum)
+ stream.write("enum %s {\n" % enum.name)
+ for enumval in enum.values:
+ stream.write(" %s,\n" % enumval.name)
+ stream.write("}\n")
+ # Generate native message
+ for native in self.AST.nativeMessages:
+ self.writeMultiLineComment(stream, native)
+ stream.write("native_message %s\n" % native.name)
+ # Generate message type
+ for msg in self.AST.messages:
+ self.writeMultiLineComment(stream, msg)
+ stream.write("message %s {\n"%msg.name)
+ for field in msg.field_list:
+ stream.write(" %s %s %s" %
(field.qualifier,field.typeid,field.name))
+ if field.hasDefaultValue():
+ stream.write("= %s\n" % field.defaultValue)
+ else:
+ stream.write("\n")
+ stream.write("}\n")
# Build the PLY parser
parserlogger = logging.Logger("MessageParser")
@@ -551,6 +586,9 @@
parser.parse(msgFile.read(),lexer=lexer)
msgFile.close()
mainlogger.info("Parse succeeded AST = %s" % (parser.AST))
+mainlogger.info("Generate Text AST:")
+textGen = TextGenerator(parser.AST)
+textGen.generate(sys.stdout)
sys.exit()
for l in msgFile:
- [certi-cvs] certi/scripts GenerateMessages.py,
certi-cvs <=