aboutsummaryrefslogtreecommitdiffstats
path: root/examples/serialize_ast.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/serialize_ast.py')
-rw-r--r--examples/serialize_ast.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/examples/serialize_ast.py b/examples/serialize_ast.py
new file mode 100644
index 0000000..e0f8aa3
--- /dev/null
+++ b/examples/serialize_ast.py
@@ -0,0 +1,36 @@
+#-----------------------------------------------------------------
+# 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()