| #----------------------------------------------------------------- | |
| # pycparser: serialize_ast.py | |
| # | |
| # Simple example of serializing AST | |
| # | |
| # Hart Chu [https://github.com/CtheSky] | |
| # Eli Bendersky [https://eli.thegreenplace.net/] | |
| # License: BSD | |
| #----------------------------------------------------------------- | |
| from __future__ import print_function | |
| import pickle | |
| from pycparser import c_parser | |
| text = r""" | |
| void func(void) | |
| { | |
| x = 1; | |
| } | |
| """ | |
| parser = c_parser.CParser() | |
| ast = parser.parse(text) | |
| # Since AST nodes use __slots__ for faster attribute access and | |
| # space saving, it needs Pickle's protocol version >= 2. | |
| # The default version is 3 for python 3.x and 1 for python 2.7. | |
| # You can always select the highest available protocol with the -1 argument. | |
| with open('ast', 'wb') as f: | |
| pickle.dump(ast, f, protocol=-1) | |
| # Deserialize. | |
| with open('ast', 'rb') as f: | |
| ast = pickle.load(f) | |
| ast.show() |