Skip to content

Small Lang is a small programming language which you are do build yourself as your first programming language.

Notifications You must be signed in to change notification settings

airportyh/smallang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Small Lang

Small Lang is a small programming language you can build yourself as your first programming language. It is a part of a course for learning how to build a programming language using JavaScript.

This language is small, as its name suggests. But it is also powerful as it follows the example of LISP in leveraging the expressive power of lambda functions.

Features

  • numbers
  • strings
  • variables
  • functions
  • lambda functions
  • other data types (like arrays and dictionaries) can be supported via adding runtime functions

Code Example

The following code example contains all of the features of the language:

print("Hello, world")
print("3 + 5 =" add(3 5))

hello = (subject) => {
    print(concat("Hello, " subject))
    print(concat("Hello, " subject))
}

doIt = () => {
    print("Do it!")
}

doIt()

hello("Brother")

classmates = split("Jerry Jordan Johnny Jack Jeffery" " ")

each(classmates (peep) =>
    print(concat("Hello " peep))
)

fib = (n) =>
    if(eq(n 1)
        () => 1
        () =>
            if(eq(n 2)
                () => 1
                () =>
                    add(
                        fib(subtract(n 1))
                        fib(subtract(n 2))
                    )
            )
        )

print(fib(9))

Video Episodes

Todo List

  • parser
    • define moo lexer
      • number literal
      • string literal
      • assignment operator
      • identifier
      • parans
      • braces
      • fat arrow
      • whitespace
      • newline
    • make a parse.js that creates .ast files
    • variable assignment
    • function call
    • multiple lines
    • lambda function
    • comments
  • generator
    • make a generate.js that creates .js files
    • variable assignment
    • function call
    • runtime functions
    • lambda function
    • comments
  • code challenges

Troubleshooting FAQ

If you are on Windows, you will encounter a lexer error similar to:

name = "Bob"
                         ^
Unexpected input (lexer error). Instead, I was expecting to see one of the following:

A NL token based on:
    statements → statements ● %NL statement

    at Parser.feed (C:\Users\dflyn\thingscript_test\node_modules\nearley\lib\nearley.js:295:27)
    at main (C:\Users\dflyn\thingscript_test\parse.js:19:8)

The fix is to change the following line in lexer.js:

NL:  { match: /[\n]+/, lineBreaks: true }

to

NL:  { match: /[\r\n]+/, lineBreaks: true }

Thank you very much to Derek for finding this fix!

My Other Stuff on Programming Languages

About

Small Lang is a small programming language which you are do build yourself as your first programming language.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages