Package Exports
- solidity-parser-antlr
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (solidity-parser-antlr) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
solidity-parser-antlr
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. |
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