UNPKG

solidity-antlr4

Version:

Solidity Lang Lexer and Parser by official ANTLR4 grammar

41 lines (40 loc) 1.31 kB
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", () => { });