About

I always wanted to create my very own programming language. My exploration of interpreters began when I was 15. At that time, I built an interpreter using recursion and built-in string methods in the BASIC language to evaluate expressions entered by the users. However, I never had a chance to design a laxer and add the functionalities allowing users to write script files (e.g. adding if statements and for loops).

It has been almost 5 years since when I first created the simple interpreter. Over the years, I find myself buried in piles and piles of CRUD applications. For example, in the year 2020, I made at least 3000 commits to some kind of CRUD application, as it is the most common thing that all of us face at work. I think it's time for me to get out of that pile for just a little bit.

As my responsibilities grow, I realize that I begin to have less and less time to learn and explore the topics that have always fascinated me. I dislike this trend, so I joined UofT Hacks to get mentorship support and motivate myself to complete this ambitious project. I want to thank all the people that I met during UofT Hacks, and particularly their welcoming attitude and amazing suggestions.

The purpose of this project is to learn and build my own laxer to evaluate expressions, finding a good enough approach to run script files provided by the users of my language, and ultimately make JimmyScript Turing Complete. Due to the lack of time in the hackathon, I'm not planning to write my own compiler, and I will build an interpreter on top of the Python language; however, the concept should be the same if I were to build this on top of any other programming language.

This project is created solely for learning purposes. An anti-purpose for this project, for example, would be to create a programming language that is of high performance or is actually usable in some daily tasks.

I swear that I have no idea of what a laxer is, how to build a programming language, or even how to start this project before today (2021-02-20).

The Video

The video shows three ways to create a variable, and they are all equivalent. There exist other types of errors such as invalid variable names and unexpected token errors that were not demonstrated in the video.

Challenges I ran into

I had no idea how to build a programming language before 2021-02-20. I had to do a lot of research on my own to create this interpreter.

The actual creation process was more overwhelming than I initially thought. There are many details in a programming language that we are so used to, so we just take advantage of them and never think about what goes behind. From error handling to syntax parsing, from forcing variable naming rules to priorities in calculations, there are just too many things to take care of.

Accomplishments that I'm proud of

I'm so proud that I learned a lot of things during this hackathon. I had a chance to talk to mentors and get their feedback in terms of ideas, which was very awarding.

I also start to understand many concepts that go behind a programming language. For example, I learned what the word "token" means in "unexpected token errors" that I used to see in some programming languages. For another example, I start to understand why some programming languages don't allow variable names to begin with digits.

I was very productive. I created a shell version of my script to handle calculations and variable assignments as of the time I'm writing this. Overall, although I did not plan to enter any challenges and just wanted to learn and have fun, I ended up having a more rewarding experience than I initially thought.

What's next for Jimmy Script

If-statements, loops, arrays, hashmaps, graphs, and more. Please look at the GitHub repository for more details!

I want to eventually make this language Turing Complete.

Consultation

I consulted many tutorials for this project. I should have a list of works consulted on my GitHub soon.

Notes

This project does not align with any challenges posted by UofT Hacks (if I missed one, please let me know!).

I created this project just for fun and submitted it to show you that I participated. It was not targeted specifically for any challenges or prizes. However, your thoughts would be appreciated!

I had to make this decision because my teammates either got rejected or dropped out later on. I had about 6 - 8 hours for this project, so this seems to be the only thing I could try...

Thank you for checking out my project!

Jimmy Lan

Built With

Share this project:

Updates

Submission history