[Deprecated] Generated JavaScript from Cirru Grammar
Cirru CoffeeScript JavaScript CSS
Latest commit fba3eae Jul 29, 2016 @jiyinyiyong jiyinyiyong update babel
Permalink
Failed to load latest commit information.
bin
examples
src
.gitignore switch to new workflow Apr 7, 2015
.npmignore switch to new workflow Apr 7, 2015
README.md
gulpfile.cirru
gulpfile.js switching to webpack Mar 17, 2015
package.json
template.cirru switch to new workflow Apr 7, 2015
webpack.config.js
webpack.min.js

README.md

CirruScript: a JavaScript generator in Cirru Grammar

Live Docs: http://script.cirru.org/

Join the chat at https://gitter.im/Cirru/cirru-script

Play with CirruScript by typing in here: http://repo.cirru.org/script/

The AST transformer of CirruScript is Scirpus https://github.com/Cirru/scirpus .

Usage

Here is a demo of calling compiler:

npm i --save cirru-script
script = require 'cirru-script'
code = "console.log :demo"
script.compile code

I use gulp-cirru-script to compile the code.

Command-line tool

By installing CirruScript at global, you'll get command cirru-script(and crs for short):

npm i -g cirru-script
crs
# enter REPL
cirru-script>
crs a.cirru
# evaluates a file

File compiling and SourceMaps support might come in the future.

Syntax

-- "test assignment"

= a 1
= b :string
= c true
= d undefined
= e /^hello\sworld$

-- "test values"

console.log 1
console.log a b c

array 1 2 3
console.log $ object (:a 1) (:b :)
  :c $ array 1

-- "combine"

console.log $ array 1 2 3

= e $ array 1 2
= f $ object
  :a 1
  :c :nothing

... gulp
  src :src/**/*.cirru (object (:base :src))
  pipe $ script (object (:dest :../lib))
  pipe $ rename (object (:extname :.js))
  pipe $ gulp.dest :./lib

> 2 1

+ 1 2 3

and (> 2 1) true

not a
not (+ a 1)

new String :x :y

. a :b

? a

in a b

= list $ array 1 2 3 4 5
= obj $ object (:a 1) (:b 2)

= a 1

if (> a 1)
  do
    console.log true
    console.log true
    console.log true
  do
    console.log false

= b $ cond (> a 1) :>1 :<=1

console.log b

= f1 $ \ (a b)
  = a $ + a 2
  console.log a b

= f2 $ \ (a)
  = a 1
  , a

= f3 $ \ ((xs))
  = head $ . xs 0
  = body $ xs.slice 1
  return body.length

switch a
  1 :1
  2
    console.log 1
    console.log 2
  else a

switch 3
  3 :3
  else :else

switch true
  (> a 1) :1
  (> 2 3) :2
  else
    console.log 2
    console.log 2

set a 4
switch true
  (> a 2) :large
  else :small

throw $ new Error ":just an error"

try
  do
    print x
  error
    console.error error

try
  do
    print y
  err

License

MIT