# cirru-parser

> Cirru Parser in CoffeeScript

Latest version **0.10.8** (published 2020-11-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install cirru-parser
pnpm add cirru-parser
yarn add cirru-parser
bun add cirru-parser
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.10.8 |
| Published | 2020-11-25 |
| First published | 2012-11-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 17.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 43 |
| Author | jiyinyiyong |
| Maintainers | jiyinyiyong |
| Keywords | cirru, parser |

## Links

- npm: https://www.npmjs.com/package/cirru-parser
- Repository: https://github.com/Cirru/parser.coffee
- Issues: https://github.com/Cirru/parser.coffee/issues
- npm.io page: https://npm.io/package/cirru-parser

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 0.10.8 (latest) — 2020-11-25
- 0.10.8-a1 — 2020-08-19
- 0.10.7 — 2015-08-18
- 0.10.6 — 2015-08-15
- 0.10.5 — 2015-08-03
- 0.10.4 — 2015-08-03
- 0.10.3 — 2015-08-03
- 0.10.2 — 2015-03-06
- 0.10.1 — 2015-01-11
- 0.10.0 — 2015-01-01
- 0.9.1 — 2014-08-31
- 0.9.0-1 — 2014-05-08
- 0.9.0-0 — 2014-05-08
- 0.8.2-0 — 2014-05-08
- 0.8.1-2 — 2014-05-06
- … 23 more at https://npm.io/package/cirru-parser/versions

## README

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

![](https://img.shields.io/npm/v/cirru-parser.svg)

```bash
npm install --save cirru-parser
```

```coffee
{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:

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

And expressions here are just tokens in arrays, like:

```coffee
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/`][cirru] and [`ast/`][ast] directories.

[cirru]: https://github.com/Cirru/cirru-parser/tree/master/cirru
[ast]: https://github.com/Cirru/cirru-parser/tree/master/ast

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][sf].

[sf]: http://blog.segmentfault.com/jiyinyiyong/1190000000636303

### Development

Run tests:

```
cirru-script test.cirru
```

Write code:

```bash
yarn
yarn 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

---
_Source: https://npm.io/package/cirru-parser · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
