TypeScript icon, indicating that this package has built-in type declarations

0.3.11 • Public • Published


Gram abstract syntax tree definitions, tokenizing regexes, and utilities like type guards.

How to gram-ast


npm install @gram-data/gram-ast

Use [[gram-parse]] to create an AST, then introspect with gram-ast:

import { isGramSeq, isGramNode, isGramEdge } from '@gram-data/gram-ast';
import { toAST } from '@gram-data/gram-parse';  

const src = '(a)-->(b)';
const parsed = toAST(src);

// the top-level of the AST is a sequence of paths

// the first path should be an edge
const firstPath = parsed.children[0];

// the children of an edge are nodes

Syntax Tree

The gram AST is based on the unist specification for syntax trees. Many of the tools and techniques of the unified ecosystem can be applied to working with gram.

Gram represents data using two basic elements: paths and sequences.

Paths provide structure. Sequences provide order.

{@linkcode gram-ast.GramSeq | GramSeq}

A gram sequence is the root element of an AST. It is exactly what it sounds like: a sequence of elements where each element is a path.

The AST type is useful in returning a well-rooted tree that can be processed by general-purpose AST tools like unist-util-visit.

In practice this is equivalent to a GramPath[]. Most gram functions will accept either.

{@linkcode gram-ast.GramPath | GramPath}

A gram path is either an empty path, or the composition of two other paths. The data structure of a path is like a list which remembers how it was assembled. The list elements are other paths.

Each path has its own identity, labels and a data record.


In the AST, records are a multimap presented as an array of name/value properties. That means a property name may appear more than once, with different or the same values.

When mapping to a data model, choose one of these strageies for handling the multimapped properties:

  • single-state: pick the first or last value (recommended)
  • join: accumulate the values into an array
  • reduce: aggregate the values into a single value

Next Steps

  • Learn more about parsing with [[gram-ast]]
  • Transform to js objects using [[gram-value]]
  • Serialize back to text using [[gram-stringify]]

Package Sidebar


npm i @gram-data/gram-ast

Weekly Downloads






Unpacked Size

174 kB

Total Files


Last publish


  • akollegger