in reply to Identifying functions in a c file and replacing with a keyword
#!/usr/bin/env perl use v5.12; use C::Scan; use Data::Dumper; use File::Temp qw(tempfile); # Create a C source file to parse... my $code = <<'DATA'; int func_a (); void func_b (int foo); float func_c (int foo, float bar); int func_d (char* baz) { return func_a(4); } DATA my ($fh, $name) = tempfile(); print $fh $code; close $fh; # Let's see what's in the file my $scan = "C::Scan"->new(filename => $name); say "Declared functions:"; say for map $_->[1], @{ $scan->get("parsed_fdecls") }; say "Inline functions:"; say for map { /^\w+\s+(\w+)/s } @{ $scan->get("inlines") }; say "---"; # OK, let's make an array of those function names my @funcs = ( (map $_->[1], @{ $scan->get("parsed_fdecls") }), (map { /^\w+\s+(\w+)/s } @{ $scan->get("inlines") }), ); print Dumper \@funcs; say "---"; # Make a regexp out of that. my $regexp = join "|", map quotemeta, @funcs; # Let's do a search and replace on the original code $code =~ s{($regexp)}{$1\_main}g; say $code;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Identifying functions in a c file and replacing with a keyword
by ijalab (Initiate) on Mar 18, 2013 at 11:30 UTC | |
by syphilis (Archbishop) on Mar 18, 2013 at 11:42 UTC | |
by ijalab (Initiate) on Mar 18, 2013 at 11:58 UTC | |
by marto (Cardinal) on Mar 18, 2013 at 12:30 UTC | |
by ijalab (Initiate) on Mar 18, 2013 at 13:43 UTC | |
| |
by tobyink (Canon) on Mar 18, 2013 at 11:45 UTC |