UNPKG

solidity-antlr4

Version:

Solidity Lang Lexer and Parser by official ANTLR4 grammar

32 lines (31 loc) 1.14 kB
import { SolidityASTBuilder } from "../ast/builder.js"; import { SolidityParser, SolidityLexer, CommonTokenStream, CharStreams } from "../antlr4/index.js"; import { ParseError, SolidityErrorListener } from "./error-listener.js"; export const defaultParseOption = { tolerant: false, selector: (p) => p.sourceUnit() }; export const parse = (source, _options) => { let syntaxTree; const options = Object.assign({}, defaultParseOption, _options); const listener = new SolidityErrorListener(); try { const input = CharStreams.fromString(source); const lexer = new SolidityLexer(input); const token = new CommonTokenStream(lexer); const parser = new SolidityParser(token); parser.removeErrorListeners(); parser.addErrorListener(listener); const visitor = new SolidityASTBuilder(); const parseTree = options.selector(parser); syntaxTree = parseTree.accept(visitor); } catch (error) { if (error instanceof ParseError) { } else { listener.errors.push(new ParseError(error.message || "unknown error")); } } if (!options.tolerant) listener.throws(); return syntaxTree; };