mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 12:54:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
<p align="center">
 | 
						|
<img src="https://raw.githubusercontent.com/mermaid-js/mermaid/develop/docs/public/favicon.svg" height="150">
 | 
						|
 | 
						|
</p>
 | 
						|
<h1 align="center">
 | 
						|
Mermaid Parser
 | 
						|
</h1>
 | 
						|
 | 
						|
<p align="center">
 | 
						|
Mermaid parser package
 | 
						|
<p>
 | 
						|
 | 
						|
[](https://www.npmjs.com/package/@mermaid-js/parser)
 | 
						|
 | 
						|
## How the package works
 | 
						|
 | 
						|
The package exports a `parse` function that has two parameters:
 | 
						|
 | 
						|
```ts
 | 
						|
declare function parse<T extends DiagramAST>(
 | 
						|
  diagramType: keyof typeof initializers,
 | 
						|
  text: string
 | 
						|
): T;
 | 
						|
```
 | 
						|
 | 
						|
## How does a Langium-based parser work?
 | 
						|
 | 
						|
```mermaid
 | 
						|
sequenceDiagram
 | 
						|
actor Package
 | 
						|
participant Module
 | 
						|
participant TokenBuilder
 | 
						|
participant Lexer
 | 
						|
participant Parser
 | 
						|
participant ValueConverter
 | 
						|
 | 
						|
 | 
						|
Package ->> Module: Create services
 | 
						|
Module ->> TokenBuilder: Override or/and<br>reorder rules
 | 
						|
TokenBuilder ->> Lexer: Read the string and transform<br>it into a token stream
 | 
						|
Lexer ->> Parser: Parse token<br>stream into AST
 | 
						|
Parser ->> ValueConverter: Clean/modify tokenized<br>rules returned value
 | 
						|
ValueConverter -->> Package: Return AST
 | 
						|
```
 | 
						|
 | 
						|
- When to override `TokenBuilder`?
 | 
						|
 | 
						|
  - To override keyword rules.
 | 
						|
  - To override terminal rules that need a custom function.
 | 
						|
  - To manually reorder the list of rules.
 | 
						|
 | 
						|
- When to override `Lexer`?
 | 
						|
 | 
						|
  - To modify input before tokenizing.
 | 
						|
  - To insert/modify tokens that cannot or have not been parsed.
 | 
						|
 | 
						|
- When to override `LangiumParser`?
 | 
						|
 | 
						|
  - To insert or modify attributes that can't be parsed.
 | 
						|
 | 
						|
- When to override `ValueConverter`?
 | 
						|
 | 
						|
  - To modify the returned value from the parser.
 |