Skip to content

leightonthomas/lang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Statically typed toy programming language using a recursive descent parser & Pratt parsing for expressions, with Hindley-Milner type inference (algorithm W)

Compiles to a stack-based custom bytecode that is then interpreted

Setup

composer install

Compiling

src/console.php build {{FILE}} --verbose

Disassembling

src/console.php disassemble {{FILE}} --verbose

Running

src/console.php run {{FILE}} --verbose

Testing

vendor/bin/phpunit

Example

// some comment
fn int main() {
    let number = getNumber();
    if (! (number < 5)) {
        echo("hello");
    }
    
    if (number == 6) {
        echo(", world!");
    }
    
    {
        number = number - {
            return 1;
        };
    };
    
    while (number < 10) {
        number = number + 1;
        
        if (number == 9) {
            break;
        }
    }

    // 12
    return {
        let someOtherNumber = { return 3; };

        return number + someOtherNumber;
    };
}

fn int getNumber() {
    return getLeft(1) - getRight();
}

fn int getLeft(int minus) {
    return (3) - minus;
}

fn int getRight() {
    return -4;
}

fn unit noReturnFunction() {

}

About

Statically typed toy programming language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published