• Stars
    star
    167
  • Rank 226,635 (Top 5 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 7 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Lioness Programming Language

Lioness β€’ Cub β€’ SavannaKit

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.

More Repositories

1

panelkit

A UI framework that enables panels on iOS.
Swift
3,800
star
2

openterm

OpenTerm, a sandboxed command line interface for iOS
Swift
1,614
star
3

savannakit

A high-performance, protocol oriented, framework for creating native IDEs for iOS and macOS, written in Swift
Swift
870
star
4

source-editor

A native source editor for iOS and macOS, written in Swift
Swift
740
star
5

textor

A plain text editor for iOS
Swift
587
star
6

cub

The Cub Programming Language
Swift
220
star
7

huekit

A UI framework for iOS that provides components and utilities for building color pickers.
Swift
208
star
8

pointerkit

A proof of concept framework to use a pointing device on iOS
Objective-C
170
star
9

bezierpath-polygons

Adds a convenience initalizer to UIBezierPath for generating n-sided regular polygon paths – with rounded corners support – in Swift!
Swift
156
star
10

bezierpath-length

A simple API to get the length of a CGPath, UIBezierPath or NSBezierPath, written in Swift.
Swift
85
star
11

savanna

A native iOS & macOS IDE for the Cub programming language
Swift
73
star
12

icns2png

A Swift command line script that converts .icns files to .png files at various sizes
Swift
34
star
13

microcontroller-kit

Value types, operators and functions for tinkering with microcontrollers in software.
Swift
20
star
14

KeyCommandAlertController

UIAlertController wrapper to add keyboard shortcuts easily
Swift
19
star
15

markdown-table-gen

A script that generates a Markdown table from an array of strings for a given number of columns
Swift
17
star
16

java-class-quick-look

Quick Look plugin to display Java class files as bytecode
C
12
star
17

silverfox-gen

Generator for the static content of silverfox.be
Swift
9
star
18

sierpinski-curve-swift

Generates a SierpiΕ„ski curve using a turtle mechanism in Swift.
Swift
9
star
19

cmd-almanac

A list of commands I frequently use
6
star
20

panelkit-handle-view

IBDesignables to play around with corner radii of the resize handles in PanelKit.
Swift
5
star
21

openterm-scripts-library

Example scripts for OpenTerm, written in Cub
Swift
4
star
22

cub-guide

A guide for the Cub programming language
HTML
3
star
23

sniper

A basic 2D physics engine written in C#
C#
1
star
24

subnet-manager-java

A subnet manager written in Java (college assignment)
Java
1
star
25

silverfox-site

The HTML, CSS & JavaScript of silverfox.be
JavaScript
1
star
26

silverfox-news

The news items of silverfox.be
1
star