Monday, May 9, 2016

Simple cpp in perl

Here's a perl version.

#!/usr/bin/perl -w
#
# CJKim, 9-May-2016
#

use strict;

my %dict = ();
my $inc = 1;
while (<>) {
    chomp;
    if (/^\s*#define\s+(\w+)\s*(.*)$/) {
        $dict{$1} = $2;
        next;
    }
    if (/^\s*#ifdef\s+(\w+)\s*$/) {
        $inc = 0 unless defined $dict{$1};
        next;
    }
    if (/^\s*#ifndef\s+(\w+)\s*$/) {
        $inc = 0 if defined $dict{$1};
        next;
    }
    if (/^\s*#else\s*$/) {
        $inc = ($inc ? 0 : 1);
        next;
    }
    if (/^\s*#endif\s*$/) {
        $inc = 1;
        next;
    }
    if (/^\s*#undef\s+(\w+)\s*$/) {
        undef $dict{$1}
        next;
    }
    next unless $inc;
    while (my ($m, $v) = each %dict) {
        $_ =~ s/$m/$v/g;
    }
    print $_, "\n";
}

No comments:

Post a Comment