Zack Murry

Profile picture.
Zack Murry

B.S. student in Computer Science and Mathematics

University of Missouri

Nodecode

I started working on Nodecode in preparation for the 2022 Technology Student Association conference, which is a national high-school competitions with many events. My teammate Daniel Huinda and I worked together to create something that had been in my list of ideas for several months: a graph-based programming language, in which related code is connected through edges. Through my earlier experience in creating stellar, a C-like programming language written in C++, I engineered a C#-based compiler using a ported version of the LLVM application binary interface. Daniel, with his experience in Windows desktop applications, created the UI.

How it works

A typical compiler has four basic components: a lexer, a parser, a semantic analyzer, and a code generator. Essentially, these parts read the text into symbols, group the symbols into an Abstract Syntax Tree (AST), run pre-processing to create things like function prototypes, and generate the executable binary, respectively. Since the user's code in Nodecode is already structurally organized into a modified AST, these first two compilation steps can be skipped, meaning that the compiler simply runs pre-processing on the AST and calls the LLVM interface to create an appropriate binary (which is easier said than done).

Nodecode LLVM conversion.

For example, below is the code to pass a function declaration object into LLVM.