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/
npm install --save cirru-parser
{parse, pare} = 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.
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/tiye/bdda3f616ff0f1bea917
This method was developed in [the Go version][go], you may check it out here.
Run tests:
cirru-script test.cirru
Write code:
yarn
yarn watch
# view generated index.html in a web server
Read more details https://github.com/mvc-works/cirruscript-workflow
- switch to
ex, ey
from$x, $y
- Rewritten with new solution from Go
- drop caution
MIT