After learning about the Little Man Computer (LMC) for our Computer Science course, we decided that the simulators and tools out there were insufficient. The existing tools have little to no debugging and the layouts aren't visually pleasing. We also found a serve limitation in tools to learn and gain experience using the LMC. This hopes to change that
What it does
This is a network-blind LMC interpreter with a visually appealing and intuitive GUI. With basic debug features, it is easier to spot and fix problems arising from LMC code.
To teach and show how limiting LMC is, we also built our own simple high-level language (nicknamed Extended LMC (E-LMC))that compiles to LMC. This tool can show people how even supposedly simple commands are actually very complex and require lots of code
How we built it
We collaboratively developed separate sections. Kacper worked on the GUI, Jack worked on the back-end, and Rory worked on E-LMC. Due to the network-blind communication protocol between programs, it's possible for all these programs to be independent of each other but still communicate and work together
Challenges we ran into
We ran into many challenges. The main problem by far was hardware. One of the laptops simply does not work. It will turn on, but it cannot be used. The workaround for this was to boot a Ubuntu OS from a USB and run it from there. This meant that Kacper, who was the one using that computer, would lose not only all uncommitted work but also the whole environment setup, anytime the computer crashed and turned off
Another challenge we ran into was the complexity of E-LMC. As with any high-level language, it has features that are very abstract. It was difficult to develop compilation tools that would be able to handle nested loops, and so we compromised and restricted user defined branching was restricted
Accomplishments that we're proud of
The GUI has turned out really well. It looks really nice and the animations are smooth. The syntax highlighting is clear and efficient.
The user of server protocols has also allowed for efficent communication between programs