Parser of Cirru Grammer

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

You may also find another implementation written in Go.

npm install --save cirru-parser
{parsepare} = require 'cirru-parser'
syntaxTree = parse codefilename
simplifiedTree = pare codefilename
info = caution char
  • 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: 1
  ey: 1
  path: 'a.cirru'

And expressions here are just tokens in arrays, like:

expression = [
  • 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: . 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 ,):

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

Run tests:

gulp test

Also you may debug index.html in a browser after compiling the code:

npm i
gulp start
# view generated index.html in a web server
  • switch to ex, ey from $x, $y
  • Rewritten with new solution from Go
  • drop caution