[Yunq] Add ability to namespace declarations using "package".

This commit is contained in:
Drew Galbraith 2023-11-30 08:50:15 -08:00
parent 9fdd670a23
commit f1e09b2ae6
15 changed files with 153 additions and 10 deletions

View file

@ -21,42 +21,48 @@ def main():
parser = Parser(lexemes)
ast = parser.parse()
print_ast(ast)
type_check(ast)
messages = [m for m in ast if type(m) is Message]
interfaces = [i for i in ast if type(i) is Interface]
# We know there is only one package decl from the type_check.
packages = [p for p in ast if type(p) is Package]
package = None
if len(packages) == 1:
package = packages[0]
jinja_env = Environment(loader=FileSystemLoader(pathlib.Path(__file__).parent.resolve()))
message_header_tmpl = jinja_env.get_template("message.h.jinja")
with open(filename + '.h', mode='w') as f:
message_header = message_header_tmpl.render(messages=messages)
message_header = message_header_tmpl.render(messages=messages, package=package)
f.write(message_header)
message_impl_tmpl = jinja_env.get_template("message.cpp.jinja")
message_impl_tmpl.globals['Type'] = Type
with open(filename + '.cpp', mode='w') as f:
message_impl = message_impl_tmpl.render(file=filebase, messages=messages)
message_impl = message_impl_tmpl.render(file=filebase, messages=messages, package=package)
f.write(message_impl)
client_header_tmpl = jinja_env.get_template("client.h.jinja")
with open(filename + '.client.h', mode='w') as f:
client_header = client_header_tmpl.render(file=filebase, interfaces=interfaces)
client_header = client_header_tmpl.render(file=filebase, interfaces=interfaces, package=package)
f.write(client_header)
client_impl_tmpl = jinja_env.get_template("client.cpp.jinja")
with open(filename + '.client.cpp', mode='w') as f:
client_impl = client_impl_tmpl.render(file=filebase, interfaces=interfaces)
client_impl = client_impl_tmpl.render(file=filebase, interfaces=interfaces, package=package)
f.write(client_impl)
server_header_tmpl = jinja_env.get_template("server.h.jinja")
with open(filename + '.server.h', mode='w') as f:
server_header = server_header_tmpl.render(file=filebase, interfaces=interfaces)
server_header = server_header_tmpl.render(file=filebase, interfaces=interfaces, package=package)
f.write(server_header)
server_impl_tmpl = jinja_env.get_template("server.cpp.jinja")
with open(filename + '.server.cpp', mode='w') as f:
server_impl = server_impl_tmpl.render(file=filebase, interfaces=interfaces)
server_impl = server_impl_tmpl.render(file=filebase, interfaces=interfaces, package=package)
f.write(server_impl)
if __name__ == "__main__":