cirru-parser

Cirru Parser in CoffeeScript

Cirru is an indentation-based grammar. You may use it to create your own DSLs or scripting languages.

Find more at http://cirru.org/

npm install --save cirru-parser
{parsepare} = require 'cirru-parser'
 
syntaxTree = parse 'code''filename' # [{text: 'code', x: 0, y:0, ex: 4, ey: 1}] 
simplifiedTree = pare 'code''filename' # ['code'] 
  • parse(code, filename):

Parse code in Cirru grammar, filename is optional:

A token in syntaxTree is like:

token =
  text: 'get'
  x: 0
  y: 0
  ex: 3
  ey: 3
  path: 'a.cirru'

And expressions here are just tokens in arrays, like:

expression = [
  token
,
  [
    token
  ,
    [
      token
    ]
  ]
]
  • pare(code, filename):

pare is short for parse, filename is optional.

simplifiedTree does not contain informations of files, like line numbers, file content, which are needed in caution.

A token from pare is a string, i.e. the text field of parsing results.

Demo: http://repo.cirru.org/parser/ . By typing on the left you should see the pare results on the right.

Detailed examples can be found in cirru/ and ast/ directories.

For short, there are then rules of Cirru:

  • It indents with 2 spaces
  • Parentheses are closed in the same line it opened
  • Strings are quoted with double quotes: "string"
  • $ folds followed tokens in an expression
  • , unfolds followed tokens in an expression

Here's a Gist showing how it's parsed(not including the steps solving $ and ,):

https://gist.github.com/jiyinyiyong/bdda3f616ff0f1bea917

This method was developed in [the Go version][go], you may check it out here.

Run tests:

cirru-script test.cirru

Write code:

npm i
gulp html
webpack-dev-server --hot
# view generated index.html in a web server

Read more details https://github.com/mvc-works/webpack-workflow

  • switch to ex, ey from $x, $y
  • Rewritten with new solution from Go
  • drop caution

MIT