A minimalist Scheme-like programming language interpreter written in Python. This project implements a custom programming language with support for basic arithmetic operations, conditionals, and functional programming concepts.
- Lambda functions and closures
- Basic arithmetic operations
(+, -, *, /)
- Comparison operators
(<, >, <=, >=)
- Boolean operations
(and, or, not)
- Conditional statements
(if)
- Local variable bindings
- Comments support
- List data structure
git clone https://github.com/M-krishna/toy_lang.git
cd toy_lang
python3 main.py
; Hello World
(display "Hello, World!")
; Basic arithmetic
(+ 1 2 3) ; => 6
(* 4 5) ; => 20
; Lambda functions
(lambda (x) (* x x))
; Conditional statements
(if (> 5 3)
"yes"
"no")
; Strings
"Hello World"
Arithmetic Operations
- Addition:
(+ 1 2 3)
- Subtraction:
(- 10 5)
- Multiplication:
(* 2 3 4)
- Division:
(/ 10 2)
Comparison Operators
- Less than:
(< 5 10)
- Greater than:
(> 10 5)
- Less than or equal:
(<= 5 5)
- Greater than or equal:
(>= 10 10)
Boolean Operations
- And:
(and #t #f)
- Or:
(or #t #f)
- Not:
(not #t)
Functions
; Define a function
(lambda (x) (* x x))
; Using begin for multiple expressions
(begin
(define square (lambda (x) (* x x)))
(square 5))
List data structure
; An empty list
(list)
()
; A list with single value
(list 1)
(1)
(list "a")
(a)
; A list with multiple values
(list 1 2 3 4 5 6 7 8)
(1 2 3 4 5 6 7 8)
(list "a" "b" "c")
(a b c)
; Nested list
(list 1 (list 2 3) 4 5)
(1 (2 3) 4 5)
; Defining a list
(define my_list (list 1 2 3))
my_list ; (1 2 3)
; Defining a nested list
(define my_list (list 1 2 (list 3 4) 5))
my_list ; (1 2 (3 4) 5)
Functions for list data structure
(car (list 1 2 3)) ; returns 1
(cdr (list 1 2 3)) ; returns (2 3)
Cons for constructing pairs
(cons 1 2) ; (1 . 2)
(cons 1 (cons 2 3)) ; (1 2 . 3)
(cons 1 (list 2 3 4)) ; (1 2 3 4)
(cons (list 1 2) 3) ; ((1 2) . 3)
(define pair1 (cons 10 20))
(define pair2 (cons 30 40))
(define combined (cons pair1 pair2))
combined ; ((10 . 20) . (30 . 40))
(car combined) ; (10 . 20)
(cdr combined) ; (30 . 40)
To set up the development environment:
git clone https://github.com/M-krishna/toy_lang.git
cd toy_lang
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.