# Engelberg/instaparse

Repository: https://github.com/Engelberg/instaparse
Canonical: https://ross.abutalabs.com/products/instaparse
Language: Clojure
License: EPL-1.0
License Family: copyleft
Last push: 2024-05-30T05:52:26+00:00

## Health v2 (maintenance only)
Score: 32/100 (v2, computed 2026-09-02T17:46:02.011165+00:00)
- activity 0, release rhythm 35, longevity 100
- inputs: {"age_days": 4959, "days_push": 825, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: no_releases
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 2822, forks 153 (observed 2026-08-28T04:07:24.045275+00:00)

## What it is
Instaparse is a Clojure/ClojureScript library that turns context-free grammars written in standard EBNF or ABNF notation into executable parsers that map input strings to parse trees. It handles any context-free grammar, including left-recursive and ambiguous ones, and offers hiccup/enlive output, lookahead extensions, full parse enumeration, and detailed error reporting.

## Use cases
- parse strings with a context-free grammar in Clojure
- turn an EBNF or ABNF grammar into a working parser
- build a parser for a small DSL without hand-writing a lexer
- handle left-recursive or ambiguous grammars and enumerate all parses
- debug a grammar that fails to match a string
- produce parse trees in hiccup or enlive format
- extend a grammar with lookahead and negative lookahead

## When to choose
- You want to go from a written grammar to an executable parser with almost no boilerplate in Clojure or ClojureScript
- Your grammar is left-recursive, ambiguous, or otherwise hard for hand-rolled or LL/LR tools to handle
- You need to inspect all possible parses while designing or debugging a grammar
- You prefer declarative EBNF/ABNF notation over building parsers combinator by combinator

## When to avoid
- You need a hand-tuned lexer/parser generator for maximum throughput on very large inputs
- You require strict PEG semantics or streaming/incremental parsing
- You are working outside Clojure/ClojureScript (JVM or JavaScript runtimes)
- Regular expressions are sufficient for your pattern-matching needs

## Facets
- artifact type: library
- maturity: stable
- function: parser
- domain: parsers, programming-languages, developer-tools
- platform: jvm, browser
- tags: clojure, clojurescript, context-free-grammar, ebnf, abnf, parser-combinator, parse-tree, parser-generator, peg-lookahead, ambiguous-grammars, dsl-parsing, nodejs

## Member repositories
- Engelberg/instaparse (main) score 32

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:07:24.045275+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T07:38:17.968009+00:00, confidence not recorded.
  - readme: https://github.com/Engelberg/instaparse (fetched 2026-08-28T04:07:24.045275+00:00, sha d7fc30396eda)
- Data as of 2026-08-30T08:39:29.467469+00:00.
