The Lioness Programming Language
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Lioness File.xctemplate
Lioness iOS
Lioness macOS Update version to 0.5.2 Jul 13, 2017
Lioness.xcodeproj
Lioness.xcworkspace
Source examples Added Fibonacci.lion and GreatestCommonDivisor.lion examples. Jan 4, 2017
Sources/Lioness
Tests Fix test file paths for Swift Package, run tests on Linux Sep 23, 2017
docs
macOS Example Update to Swift 4 and Xcode 9.0 Sep 13, 2017
.codeclimate.yml
.codecov.yml Update codecov config Jun 1, 2017
.editorconfig
.gitattributes Update .gitattributes Jun 1, 2017
.gitignore Add .build to gitignore Jun 18, 2017
.swift-version
.travis.yml
CHANGELOG.md Update CHANGELOG.md Jun 1, 2017
DecimalConfig.xcconfig Add "NUMBER_TYPE" build setting Jul 11, 2017
LICENSE Add MIT license May 31, 2017
Lioness.podspec Update version to 0.5.2 Jul 13, 2017
Package.swift
README.md Update README Feb 7, 2018
XcodeTemplate.md Update XcodeTemplate.md Jun 19, 2017

README.md

Lioness CubSavannaKit

Lioness Logo

The Lioness Programming Language

Travis build status Codecov
version 0.5.2 Carthage Compatible Swift Platform: iOS macOS tvOS watchOS Extension: .lion
Twitter Donate via PayPal

Lioness is a high-level, dynamic, programming language designed for mathematical purposes. This project includes a lexer, parser, compiler and interpreter. All of these are 100% written in Swift without dependencies.

The syntax of Lioness is inspired by Swift, and its feature set is akin to shader languages such as GLSL.

The standard library (abbreviated: stdlib) contains basic functions for number manipulation, including: max/min, ceil, floor, trigonometry, etc. However, more trivial functions, such as to calculate prime numbers, are not considered relevant for the standard library.

Source examples

The following Lioness code calculates factorials recursively:

func factorial(x) returns {
	
    if x > 1 {
        return x * factorial(x - 1)
    }
	
    return 1
}

a = factorial(5) // a = 120

The following Lioness code uses a do times loop:

a = 1
n = 10
do n times {
    a += a
}
// a = 1024

More examples can be found here.

Features

  • Minimalistic, yet expressive, syntax
  • No type system, language is dynamic
  • 5 basic operators: +, -, /, * and ^
    • ^ means "to the power of", e.g. 2^10 equals 1024
    • all operators have a shorthand, e.g. += for +
  • Numbers
    • All numbers are floating point
  • Booleans
    • Can be evaluated from comparison
    • Can be defined by literal: true or false
  • Functions
    • Supports parameters, returning and recursion
    • Can be declared inside other functions
  • Structs
    • Can contain any type, including other structs
  • Loops
    • for
    • while
    • do times
    • repeat while
    • break
    • continue
  • if / else / else if statements

Running

Since the project does not rely on any dependencies, running it requires no setup.

macOS

Open Lioness.xcworkspace (preferably in the latest non-beta version of Xcode) and run the macOS Example target. The example will run the code in A.lion. The output will be printed to the console.

Installing framework

Using Swift Package Manager

Add to your Package.swift file's dependencies section:

.Package(url: "https://github.com/louisdh/lioness.git",
		         majorVersion: 0, minor: 5)

Using CocoaPods

Add the following line to your Podfile:

pod 'Lioness', '~> 0.5'

Using Carthage

Add the following line to your Cartfile:

github "louisdh/lioness" ~> 0.5

Run carthage update to build the framework and drag the built Lioness.framework into your Xcode project.

Standard Library

Please note: Lioness is currently in beta

The Standard Library is currently under active development. There currently is no one document with everything from the stdlib. The best place to look for what's available is in the source files.

Roadmap

  • Structs
  • Completion suggestions (given an incomplete source string and insertion point)
  • Breakpoint support in interpreter
  • Stdlib documentation (Dash?)
  • Compiler warnings
  • Compiler optimizations
  • Faster Lexer (without regex)
  • Support emoticons for identifier names
  • guard statement
  • A lot more unit tests
  • Linux support

Xcode file template

Lioness source files can easily be created with Xcode, see XcodeTemplate.md for instructions.

Architecture

A detailed explanation of the project's architecture can be found here.

License

This project is available under the MIT license. See the LICENSE file for more info.