1.5 KB60 lines
Blame
1<p align="center">
2<img src="https://raw.githubusercontent.com/mermaid-js/mermaid/develop/docs/public/favicon.svg" height="150">
3
4</p>
5<h1 align="center">
6Mermaid Parser
7</h1>
8
9<p align="center">
10Mermaid parser package
11<p>
12
13[![NPM](https://img.shields.io/npm/v/@mermaid-js/parser)](https://www.npmjs.com/package/@mermaid-js/parser)
14
15## How the package works
16
17The package exports a `parse` function that has two parameters:
18
19```ts
20declare function parse<T extends DiagramAST>(
21 diagramType: keyof typeof initializers,
22 text: string
23): T;
24```
25
26## How does a Langium-based parser work?
27
28```mermaid
29sequenceDiagram
30actor Package
31participant Module
32participant TokenBuilder
33participant Lexer
34participant Parser
35participant ValueConverter
36
37
38Package ->> Module: Create services
39Module ->> TokenBuilder: Override or/and<br>reorder rules
40TokenBuilder ->> Lexer: Read the string and transform<br>it into a token stream
41Lexer ->> Parser: Parse token<br>stream into AST
42Parser ->> ValueConverter: Clean/modify tokenized<br>rules returned value
43ValueConverter -->> Package: Return AST
44```
45
46- When to override `TokenBuilder`?
47 - To override keyword rules.
48 - To override terminal rules that need a custom function.
49 - To manually reorder the list of rules.
50
51- When to override `Lexer`?
52 - To modify input before tokenizing.
53 - To insert/modify tokens that cannot or have not been parsed.
54
55- When to override `LangiumParser`?
56 - To insert or modify attributes that can't be parsed.
57
58- When to override `ValueConverter`?
59 - To modify the returned value from the parser.
60