UNPKG

solidity-antlr4

Version:

Solidity Lang Lexer and Parser by official ANTLR4 grammar

36 lines (35 loc) 1.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = exports.defaultParseOption = void 0; var _builder = require("../ast/builder.cjs"); var _antlr = require("../antlr4/index.cjs"); var _errorListener = require("./error-listener.cjs"); const defaultParseOption = exports.defaultParseOption = { tolerant: false, selector: p => p.sourceUnit() }; const parse = (source, _options) => { let syntaxTree; const options = Object.assign({}, defaultParseOption, _options); const listener = new _errorListener.SolidityErrorListener(); try { const input = _antlr.CharStreams.fromString(source); const lexer = new _antlr.SolidityLexer(input); const token = new _antlr.CommonTokenStream(lexer); const parser = new _antlr.SolidityParser(token); parser.removeErrorListeners(); parser.addErrorListener(listener); const visitor = new _builder.SolidityASTBuilder(); const parseTree = options.selector(parser); syntaxTree = parseTree.accept(visitor); } catch (error) { if (error instanceof _errorListener.ParseError) {} else { listener.errors.push(new _errorListener.ParseError(error.message || "unknown error")); } } if (!options.tolerant) listener.throws(); return syntaxTree; }; exports.parse = parse;