solidity-antlr4
Version:
Solidity Lang Lexer and Parser by official ANTLR4 grammar
41 lines (40 loc) • 1.31 kB
JavaScript
import {
CharStreams,
SolidityLexer,
SolidityParser,
CommonTokenStream
} from "../antlr4/index.js";
import { solidityASTBuilder } from "../ast/builder.js";
import { serialize } from "../traverse/index.js";
import { BaseNodeString } from "../ast/base.js";
import { test } from "vitest";
export const format = (ast) => serialize(ast, (p) => {
if (p.node instanceof BaseNodeString)
return p.node.name;
return p.node;
});
export const parse = (input, callback = (p) => p.sourceUnit(), afterParse = format) => {
const lexer = new SolidityLexer(CharStreams.fromString(input));
const parser = new SolidityParser(new CommonTokenStream(lexer));
const tree = callback(parser);
const ast = tree.accept(solidityASTBuilder);
return afterParse(ast);
};
export const createParse = (callback = (p) => p.sourceUnit(), afterParse = format) => {
return (input) => parse(input, callback, afterParse);
};
export const createLog = (callback = (p) => p.sourceUnit()) => {
return (input) => parse(input, callback, (ast) => {
const newAST = serialize(ast, (p) => {
if (p.node instanceof BaseNodeString) {
return p.node.name;
}
return p.node;
});
console.log(newAST);
return newAST;
});
};
export const visitor = solidityASTBuilder;
test("utils", () => {
});