B.S. student in Computer Science and Mathematics
University of Missouri
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.
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).
For example, below is the code to pass a function declaration object into LLVM.