Parametrize code generation actions from the command line

This commit is contained in:
Thomas Krijnen
2020-03-17 11:55:28 +01:00
parent dc8e73b822
commit 481c6165ca
5 changed files with 16 additions and 13 deletions
+5 -4
View File
@@ -2,10 +2,11 @@ This folder contains Python code to generate C++ type information based on an
Express schema. In particular is has only been tested using recent version of
the IFC schema and will most likely fail on any other Express schema.
The code can be invoked in the following way and results in two header files
and a single implementation file named according to the schema name in the
Express file. A python 3 interpreter with the pyparsing [1] library is required.
The code can be invoked in the following way and results in several code outputs
named according to the schema name in the Express file. A python 3 interpreter
with the pyparsing [1] library is required.
$ python bootstrap.py express.bnf > express_parser.py && python express_parser.py IFC2X3_TC1.exp
$ python bootstrap.py express.bnf > express_parser.py
$ python express_parser.py IFC2X3_TC1.exp header implementation schema_class definitions
[1] http://pyparsing.wikispaces.com/Download+and+Installation
+4 -9
View File
@@ -198,15 +198,10 @@ else:
with open(cache_file, "wb") as f:
pickle.dump(mapping, f, protocol=0)
import header
import implementation
import schema_class
import definitions
header.Header(mapping).emit()
implementation.Implementation(mapping).emit()
schema_class.SchemaClass(mapping).emit()
definitions.Definitions(mapping).emit()
import importlib
for output in sys.argv[2:]:
mdl = importlib.import_module(output)
mdl.Generator(mapping).emit()
sys.stdout.write(schema.name)
"""%('\n '.join(statements)))
+2
View File
@@ -64,3 +64,5 @@ class Definitions(codegen.Base):
def __repr__(self):
return self.str
Generator = Definitions
+2
View File
@@ -145,3 +145,5 @@ class Header(codegen.Base):
def __repr__(self):
return self.str
Generator = Header
+3
View File
@@ -257,3 +257,6 @@ class Implementation(codegen.Base):
def __repr__(self):
return self.str
Generator = Implementation