¿Cómo construir un AST para Solidity?

Estoy tratando de construir un analizador para Solidity, y ayudaría si pudiera construir una versión funcional del analizador existente. Intenté mirar el código fuente en el git oficial , pero nunca antes había trabajado en un proyecto de esta magnitud y es confuso. ¿Alguien podría decirme cómo puedo aislar los módulos de análisis y AST para poder leer un script y construir un AST a partir de él?

(Entiendo que el alcance puede ser demasiado amplio para esta pregunta, pero realmente agradecería cualquier sugerencia)

Respuestas (5)

Si usa solc --ast, el compilador generará una representación json del AST (esto también se incluye en la versión npm del compilador). ¿Es eso suficiente para sus propósitos? Si no, venga a Gitter para discutir.

¿Hay alguna forma de volver a convertir un AST en código Solidity? es decir, con fines de transpilación

Además de la respuesta de chriseth, también está el proyecto solidity -parser que es útil si A) está desarrollando en un contexto de Javascript, o B) no quiere que el analizador tenga un error si hay importaciones sin resolver (desafortunadamente solc --ast, tendrá un error si hay importaciones que no puede encontrar).

Además de la respuesta de Tim, también hay un python-solidity-parser basado en la sintaxis ANTLR y el formato AST utilizado en solidity-parser-antlr que puede usar si desea evitar depender del compilador. Nota: el compilador AST es la verdad.

Use flag --ast-compact-json, que proporciona el "AST de todos los archivos de origen en un formato JSON compacto".

solc --ast-compact-json contract.sol