Cirru Parser
Cirru is an indentation-based grammar. You may use it to create your own DSLs or scripting languages.
Demo http://repo.cirru.org/parser.coffee
Find more at http://cirru.org/
Usage
npm install --save cirru-parser
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.
Live demo
By typing on the left you should see the pare
results on the right.
Grammar
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
Parsing
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.
Development
Run tests:
cirru-script test.cirru
Write code:
yarnyarn watch# view generated index.html in a web server
Read more details https://github.com/mvc-works/cirruscript-workflow
Changelog
0.10.1
- switch to
ex, ey
from$x, $y
0.10.0
- Rewritten with new solution from Go
- drop caution
License
MIT