@maniascript/api
Version:
Maniascript API generator
40 lines (39 loc) • 1.45 kB
JavaScript
import { CharStream, CommonTokenStream, BaseErrorListener } from 'antlr4ng';
import { DocCommentLexer } from '../antlr/DocCommentLexer.js';
import { DocCommentParser } from '../antlr/DocCommentParser.js';
import { DocVisitor } from './doc-visitor.js';
class MSDocErrorListener extends BaseErrorListener {
errors = [];
syntaxError(_recognizer, _offendingSymbol, line, column, msg) {
this.errors.push({ message: msg, line, column });
}
}
function parse(input = '') {
const errorListener = new MSDocErrorListener();
const inputStream = CharStream.fromString(input);
const lexer = new DocCommentLexer(inputStream);
lexer.removeErrorListeners();
lexer.addErrorListener(errorListener);
const tokenStream = new CommonTokenStream(lexer);
const parser = new DocCommentParser(tokenStream);
parser.removeErrorListeners();
parser.addErrorListener(errorListener);
const tree = parser.documentation();
return {
success: errorListener.errors.length === 0,
errors: errorListener.errors,
tree,
chars: inputStream,
lexer,
tokens: tokenStream,
parser: parser
};
}
function generateFromParseResult(result) {
const visitor = new DocVisitor();
return visitor.visit(result.tree);
}
function generateFromInput(input = '') {
return generateFromParseResult(parse(input));
}
export { parse, generateFromParseResult, generateFromInput };