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