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 serverRead more details https://github.com/mvc-works/cirruscript-workflow
- switch to
ex, eyfrom$x, $y
- Rewritten with new solution from Go
- drop caution
MIT