collab/mermaid/packages/parser/README.mdblame
View source
6dd74de1<p align="center">
6dd74de2<img src="https://raw.githubusercontent.com/mermaid-js/mermaid/develop/docs/public/favicon.svg" height="150">
6dd74de3
6dd74de4</p>
6dd74de5<h1 align="center">
6dd74de6Mermaid Parser
6dd74de7</h1>
6dd74de8
6dd74de9<p align="center">
6dd74de10Mermaid parser package
6dd74de11<p>
6dd74de12
6dd74de13[![NPM](https://img.shields.io/npm/v/@mermaid-js/parser)](https://www.npmjs.com/package/@mermaid-js/parser)
6dd74de14
6dd74de15## How the package works
6dd74de16
6dd74de17The package exports a `parse` function that has two parameters:
6dd74de18
6dd74de19```ts
6dd74de20declare function parse<T extends DiagramAST>(
6dd74de21 diagramType: keyof typeof initializers,
6dd74de22 text: string
6dd74de23): T;
6dd74de24```
6dd74de25
6dd74de26## How does a Langium-based parser work?
6dd74de27
6dd74de28```mermaid
6dd74de29sequenceDiagram
6dd74de30actor Package
6dd74de31participant Module
6dd74de32participant TokenBuilder
6dd74de33participant Lexer
6dd74de34participant Parser
6dd74de35participant ValueConverter
6dd74de36
6dd74de37
6dd74de38Package ->> Module: Create services
6dd74de39Module ->> TokenBuilder: Override or/and<br>reorder rules
6dd74de40TokenBuilder ->> Lexer: Read the string and transform<br>it into a token stream
6dd74de41Lexer ->> Parser: Parse token<br>stream into AST
6dd74de42Parser ->> ValueConverter: Clean/modify tokenized<br>rules returned value
6dd74de43ValueConverter -->> Package: Return AST
6dd74de44```
6dd74de45
6dd74de46- When to override `TokenBuilder`?
6dd74de47 - To override keyword rules.
6dd74de48 - To override terminal rules that need a custom function.
6dd74de49 - To manually reorder the list of rules.
6dd74de50
6dd74de51- When to override `Lexer`?
6dd74de52 - To modify input before tokenizing.
6dd74de53 - To insert/modify tokens that cannot or have not been parsed.
6dd74de54
6dd74de55- When to override `LangiumParser`?
6dd74de56 - To insert or modify attributes that can't be parsed.
6dd74de57
6dd74de58- When to override `ValueConverter`?
6dd74de59 - To modify the returned value from the parser.