Browse Source

made more user friendly

rlbr-dev
Larry Xue 5 years ago
parent
commit
172b731224
  1. 11
      README.md
  2. BIN
      a.out
  3. 11
      c2logic/compiler.py
  4. 0
      examples/control_flow.c
  5. 0
      examples/funcs.c
  6. 4
      setup.py

11
README.md

@ -0,0 +1,11 @@
# c2logic
Compiles C code to Mindustry logic.
# Usage
`python3 -m c2logic filename -O optimization_level`
where `filename` is a string and `optimization_level` is an int
See [examples](./examples) for API sample usage.

BIN
a.out

11
c2logic/compiler.py

@ -41,7 +41,6 @@ class Compiler(c_ast.NodeVisitor):
self.loop_start = None
self.cond_jump_offset = None
ast = parse_file(filename, use_cpp=True, cpp_args=["-I", "include/"])
print(ast)
self.visit(ast)
#TODO actually handle functions properly
out = []
@ -93,8 +92,6 @@ class Compiler(c_ast.NodeVisitor):
#in case for loop is the last thing in a function to ensure the jump target is valid
#TODO avoid this when for loop isn't last thing
self.push(Noop())
print(self.curr_function)
self.functions.append(self.curr_function)
def visit_Decl(self, node):
@ -160,7 +157,6 @@ class Compiler(c_ast.NodeVisitor):
self.loop_start = len(self.curr_function.instructions)
self.visit(node.cond)
# jump over loop body when cond is false
print(self.peek())
if isinstance(self.peek(), BinaryOp):
self.push(RelativeJump(None, JumpCondition.from_binaryop(self.pop())))
else:
@ -302,7 +298,12 @@ class Compiler(c_ast.NodeVisitor):
raise NotImplementedError(node)
def main():
print(Compiler(opt_level=1).compile("examples/test.c"))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("file")
parser.add_argument("-O", "--optimization-level", type=int, default=1)
args = parser.parse_args()
print(Compiler(args.optimization_level).compile(args.file))
if __name__ == "__main__":
main()

examples/test2.c → examples/control_flow.c

examples/test.c → examples/funcs.c

4
setup.py

@ -4,10 +4,10 @@ with open("README.md", "r") as f:
setuptools.setup(
name="c2logic",
version="0.1",
descripton="Compile c to mindustry logic.",
descripton="Compiles C code to mindustry logic.",
long_description=long_description,
long_description_content_type="text/markdown",
packages=["c2logic"],
packages=["c2logic"],
license="MIT",
author="SuperStormer",
url="https://github.com/SuperStormer/c2logic",

Loading…
Cancel
Save