Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

solidity-parser-antlr

federicobond4.9kMIT0.4.11TypeScript support: included

A Solidity parser built from a robust ANTLR 4 grammar

readme

solidity-parser-antlr

npm Build Status

A Solidity parser built on top of a robust ANTLR4 grammar.

Usage

import parser from 'solidity-parser-antlr';

var input = `
    contract test {
        uint256 a;
        function f() {}
    }
`
try {
    parser.parse(input)
} catch (e) {
    if (e instanceof parser.ParserError) {
        console.log(e.errors)
    }
}

The parse method also accepts a second argument which lets you specify the following options, in a style similar to the esprima API:

Key Type Default Description
tolerant Boolean false When set to true it will collect syntax errors and place them in a list under the key errors inside the root node of the returned AST. Otherwise, it will raise a parser.ParserError.
loc Boolean false When set to true, it will add location information to each node, with start and stop keys that contain the corresponding line and column numbers. Column numbers start from 0, lines start from 1.
range Boolean false When set to true, it will add range information to each node, which consists of a two-element array with start and stop character indexes in the input.

Example with location information

parser.parse('contract test { uint a; }', { loc: true })

// { type: 'SourceUnit',
//   children:
//    [ { type: 'ContractDefinition',
//        name: 'test',
//        baseContracts: [],
//        subNodes: [Array],
//        kind: 'contract',
//        loc: [Object] } ],
//   loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }

Example using a visitor to walk over the AST

var ast = parser.parse('contract test { uint a; }')

// output the path of each import found
parser.visit(ast, {
  ImportDirective: function(node) {
    console.log(node.path)
  }
})

Author

Federico Bond (@federicobond)

License

MIT

changelog

0.5.0 (Unreleased)

  • Remove ParameterList and Parameter node types. Parameters are now always of type VariableDeclaration and lists of parameters are represented as lists of nodes of type VariableDeclaration. This is a breaking change.

0.4.9

  • Fix parsing of inheritance specifier with no arguments.

0.4.8

  • Fix parsing of string literals with escaped characters.

0.4.7

  • Fix parsing of underscores in number literals.

0.4.6

  • Add support for the type keyword.
  • Add support for underscores in number literals.

0.4.5

  • Improve TypeScript type definitions.

0.4.4

  • Add missing storageLocation to variables in VariableDeclarationStatement.
  • Return null for arguments instead of [] when ModifierInvocation contains no arguments and no parentheses to distinguish the two cases.
  • Improve TypeScript type definitions.

0.4.3

  • Improve TypeScript type definitions, thanks @Leeleo3x and @yxliang01.

0.4.2

  • Fix parsing of assembly function definitions with no args or return args.

0.4.1

  • Fix parsing of for loops with missing initial and condition statements.

0.4.0

  • Correctly handle non-existent tuple components. Thanks @maxsam4
  • Accept calldata as identifier

0.3.3

  • Add support for address payable typename.

0.3.2

  • Fix parsing of hex numbers with uppercase X.

0.3.1

  • Fix parsing of zero-component tuples.

0.3.0

  • Use components for all TupleExpression nodes. Earlier versions incorrectly stored tuple components under the elements key.
  • Fix parsing of decimal literals without integer part.