github.com/ziprandom/cltk

A Collection of Classes to define Lexers, Parsers & Abstract Syntax Trees. A port of the Ruby Language Toolking written by Chris Wailes

72 stars
1 dependent
License: University of Illinois - NCSA Open Source License

Installation

# Add this to your shard.yml
dependencies:
  cltk:
    github: ziprandom/cltk
    version: ~> 0.1.1

Then run:

shards install

shard.yml

Crystal
no constraint declared
License
University of Illinois - NCSA Open Source License
Authors
ziprandom, Chris Wailes (RLTK)

Dependencies

Runtime Dependencies

  • msgpack*github: benoist/msgpack-crystal
  • crystal-dfa*github: ziprandom/crystal-dfa, branch: master

README

cltk Build Status

This is a port of the Ruby Language Toolkit to the Crystal Programming Language.

CLTK (like RLTK) is: a collection of classes and methods designed to help programmers create languages in an easy to use and straightforward manner. This toolkit provides the following features:

In addition, CLTK includes several ready-made lexers and parsers. As well as a serialization mechanism that renders a finalized parser back into crystal syntax to compile it without having to be finalized again at startup (see exp_lang_repl for a usage example).

To see what works have a look at the specs or run them with:

$ crystal spec

The Implementation has been strongly altered but the API is compatible to RLTK. The LLVM Bindings has not been ported. Instead crystals own LLVM Bindings were used in examples/kazoo/chapter 8/kcontractor.cr

Usage

To use the toolkit in your project add this to your application's shard.yml:

dependencies:
  cltk:
    github: ziprandom/cltk

Examples

See the example languages (and their specs):

  • interpreted language EXP_LANG (examples/exp_lang)
  • kazoo (examples/kazoo/chapter 8) with LLVM IR generation
  • brainfuck (examples/brainfuck)
  • json_parser (examples/json_parser) example of a linter / xml converter

Documentation

can be found in the docs directory

Contributing

  1. Fork it ( https://github.com/ziprandom/cltk/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • ziprandom - creator of the port, maintainer