On 8/29/07, Dharshana Eswaran <[EMAIL PROTECTED]> wrote:
snip
> But i want to read only the elements of the Enum and the values assigned to
> those elements. I dont want to read the Enum names and the extra characters.
> I am unable to filter them.
snip

Sometimes one regex is not enough.   The following code has at least
one bug: it doesn't correctly handle enums of characters where one of
the characters is ',' (a valid C construct, but on I don't see often).

#!/usr/bin/perl

use strict;
use warnings;

my $text = "typedef enum foo {
        LEV_0 = 0,
        LEV_1,
        LEV_2,
        LEV_3,
        LEV_4,
        LEV_5
} sig;

typedef enum bar {
        LEV_0 = 1,
        LEV_1 = 2,
        LEV_2=4,
        LEV_3 = 8,
        LEV_4 =16,
        LEV_5 =32
} flag;";

my $ident = qr/ [A-Za-z_]\w+ /xs;
my $typedef = qr/ typedef \s+ /xs;
my $enum = qr/ $ident (?: \s* = \s* [^\s,]+)? /xs;
my $enum_statement  = qr/
        $typedef?
        enum
        \s+
        ($ident)
        \s*
        {
        \s*
        ((?: $enum \s* ,? \s* )+)
        \s*
        }
/xs;

while ($text =~ /$enum_statement/g) {
        my ($name, $block) = ($1, $2);
        print "$name\n";
        for my $e ($block =~ /($enum)/g) {
                $e =~ s/\s*=\s*/ has a value of /;
                print "\t$e\n";
        }
}

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


  • Regex Issue Dharshana Eswaran
    • Re: Regex Issue Chas Owens

Reply via email to