Akira Hayakawa | a5c4925 | 2014-08-22 13:34:53 +0900 | [diff] [blame] | 1 | #----------------------------------------------------------------- |
Hart Chu | a611da9 | 2017-02-19 11:30:42 -0600 | [diff] [blame] | 2 | # pycparser: rewrite_ast.py |
Akira Hayakawa | a5c4925 | 2014-08-22 13:34:53 +0900 | [diff] [blame] | 3 | # |
| 4 | # Tiny example of rewriting a AST node |
| 5 | # |
Jon Dufresne | 1d86699 | 2018-06-26 13:49:35 -0700 | [diff] [blame^] | 6 | # Eli Bendersky [https://eli.thegreenplace.net/] |
Akira Hayakawa | a5c4925 | 2014-08-22 13:34:53 +0900 | [diff] [blame] | 7 | # License: BSD |
| 8 | #----------------------------------------------------------------- |
| 9 | from __future__ import print_function |
| 10 | import sys |
| 11 | |
| 12 | from pycparser import c_parser |
| 13 | |
| 14 | text = r""" |
| 15 | void func(void) |
| 16 | { |
Eli Bendersky | 4a7675a | 2014-08-22 05:35:06 -0700 | [diff] [blame] | 17 | x = 1; |
Akira Hayakawa | a5c4925 | 2014-08-22 13:34:53 +0900 | [diff] [blame] | 18 | } |
| 19 | """ |
| 20 | |
| 21 | parser = c_parser.CParser() |
| 22 | ast = parser.parse(text) |
| 23 | print("Before:") |
| 24 | ast.show(offset=2) |
| 25 | |
| 26 | assign = ast.ext[0].body.block_items[0] |
| 27 | assign.lvalue.name = "y" |
| 28 | assign.rvalue.value = 2 |
| 29 | |
| 30 | print("After:") |
| 31 | ast.show(offset=2) |