dotlr
Version:
An LR(1) parser generator and visualizer created for educational purposes.
51 lines (50 loc) • 2.55 kB
TypeScript
import { Grammar as _Grammar, Parser as _Parser } from "./pkg/dotlr";
import { ActionTable, Automaton, FirstTable, FollowTable, GoToTable, GrammarError, LALR1ParserOfGrammar, LR1ParserOfGrammar, ParserError, ParsingError, ParsingTables, Rule, Spanned, Token, Trace, Tree } from "./types";
import { Err, Ok } from "ts-results-es";
export declare class Grammar<T extends string = string, NT extends string = string, R extends string = string> {
grammar: _Grammar;
private cache;
private constructor();
static parse<T extends string = string, NT extends string = string, R extends string = string>(grammar: string): Ok<Grammar<T, NT, R>> | Err<GrammarError>;
getSymbols(): NT[];
getConstantTokens(): T[];
getStartSymbol(): NT;
getProductions(): Rule<Token<T, R>>[];
getRegexTokens(): Map<R, string>;
stringify(): string;
clone(): Grammar<T, NT, R>;
}
export declare class Parser<T extends string = string, NT extends string = string, R extends string = string> {
private parser;
private cache;
constructor(parser: _Parser);
parse(input: string): Ok<Tree<NT, Token<T, R>>> | Err<ParsingError>;
getActionTable(): ActionTable<Token<T, R>>;
getGotoTable(): GoToTable<NT>;
getParseTables(): ParsingTables<NT, Token<T, R>>;
getAutomaton(): Automaton<Token<T, R>>;
getFirstTable(): FirstTable<Token<T, R>>;
getFollowTable(): FollowTable<Token<T, R>>;
tokenize(input: string): Err<ParsingError> | Ok<{
token: Spanned<Token<T, R>>;
slice: string;
}[]>;
trace(input: string): Err<ParsingError> | Ok<{
trace: Trace<Tree<NT, Token<T, R>>>;
tree: Tree<NT, Token<T, R>>;
}>;
}
export declare class LR1Parser<T extends string = string, NT extends string = string, R extends string = string> extends Parser<T, NT, R> {
private constructor();
/**
* Consumes a grammar and returns a parser, the grammar is consumed and the ownership is transferred to the parser
*/
static fromGrammar<G extends Grammar>(grammar: G): Ok<LR1ParserOfGrammar<G>> | Err<ParserError<LR1ParserOfGrammar<G>>>;
}
export declare class LALR1Parser<T extends string = string, NT extends string = string, R extends string = string> extends Parser<T, NT, R> {
private constructor();
/**
* Consumes a grammar and returns a parser, the grammar is consumed and the ownership is transferred to the parser
*/
static fromGrammar<G extends Grammar>(grammar: G): Ok<LALR1ParserOfGrammar<G>> | Err<ParserError<LALR1ParserOfGrammar<G>>>;
}