solidity-antlr4
Version:
Solidity Lang Lexer and Parser by official ANTLR4 grammar
36 lines (35 loc) • 1.3 kB
JavaScript
;
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;