Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
On Aug 22 2007 11:21, Bodo Eggert wrote: > >> >> But. The above regex does not seem to handle >> >> >> >> if ((a = b)); >> >> oops; >> >> >> >> I have tried to come up with a superduper regex that handles multiple >> >> (), but my regex fu seems to stop above two pairs of (). >> > >> >This is because you can't do that using finite regular expressions. >> > >> >Regular expressions are Type-3 grammars, but you'd need a Type-2 >> >grammar to express the Dyck language (and you need to parse a Dyck >> >Language, ignoring the non-dyck-parts). >> >> So what about this then... >> >> $s = shift @ARGV; >> $r = qr/a(??{ $r })?b/; > >This is not a regular expression, because it can't be parsed by a >finite state machine (DFA/NFA) without a stack. >http://en.wikipedia.org/wiki/Deterministic_finite_state_machine > >Obviously perl does allow non-regular expressions. Exactly, and which is why my idea was to use a (??{ }) block to match if((())); but for some reason, it did not fly, and I do not know either why. Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
On Mon, 20 Aug 2007, Jan Engelhardt wrote: > On Aug 20 2007 13:52, Bodo Eggert wrote: > >> But. The above regex does not seem to handle > >> > >> if ((a = b)); > >> oops; > >> > >> I have tried to come up with a superduper regex that handles multiple > >> (), but my regex fu seems to stop above two pairs of (). > > > >This is because you can't do that using finite regular expressions. > > > >Regular expressions are Type-3 grammars, but you'd need a Type-2 > >grammar to express the Dyck language (and you need to parse a Dyck > >Language, ignoring the non-dyck-parts). > > So what about this then... > > > $s = shift @ARGV; > $r = qr/a(??{ $r })?b/; This is not a regular expression, because it can't be parsed by a finite state machine (DFA/NFA) without a stack. http://en.wikipedia.org/wiki/Deterministic_finite_state_machine Obviously perl does allow non-regular expressions. > if ($s =~ /^$r$/) { > print "Yup, that's good\n"; > } else { > print "fail\n"; > } > > > $ perl foo.pl aa > Not so much > $ perl foo.pl > Yup, that's good > $ perl foo.pl a > Not so much perl foo.pl aaababbb fail "$r = qr/a(??{ $r })?b(??{ $r })?/;" does seem to work. -- "Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety." -- Benjamin Franklin, Historical Review of Pennsylvania, 1759 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
On Mon, 20 Aug 2007, Jan Engelhardt wrote: On Aug 20 2007 13:52, Bodo Eggert wrote: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). This is because you can't do that using finite regular expressions. Regular expressions are Type-3 grammars, but you'd need a Type-2 grammar to express the Dyck language (and you need to parse a Dyck Language, ignoring the non-dyck-parts). So what about this then... $s = shift @ARGV; $r = qr/a(??{ $r })?b/; This is not a regular expression, because it can't be parsed by a finite state machine (DFA/NFA) without a stack. http://en.wikipedia.org/wiki/Deterministic_finite_state_machine Obviously perl does allow non-regular expressions. if ($s =~ /^$r$/) { print Yup, that's good\n; } else { print fail\n; } $ perl foo.pl aa Not so much $ perl foo.pl Yup, that's good $ perl foo.pl a Not so much perl foo.pl aaababbb fail $r = qr/a(??{ $r })?b(??{ $r })?/; does seem to work. -- Those who would give up essential liberty, to purchase a little temporary safety, deserve neither liberty nor safety. -- Benjamin Franklin, Historical Review of Pennsylvania, 1759 - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
On Aug 22 2007 11:21, Bodo Eggert wrote: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). This is because you can't do that using finite regular expressions. Regular expressions are Type-3 grammars, but you'd need a Type-2 grammar to express the Dyck language (and you need to parse a Dyck Language, ignoring the non-dyck-parts). So what about this then... $s = shift @ARGV; $r = qr/a(??{ $r })?b/; This is not a regular expression, because it can't be parsed by a finite state machine (DFA/NFA) without a stack. http://en.wikipedia.org/wiki/Deterministic_finite_state_machine Obviously perl does allow non-regular expressions. Exactly, and which is why my idea was to use a (??{ }) block to match if((())); but for some reason, it did not fly, and I do not know either why. Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
On Aug 20 2007 13:52, Bodo Eggert wrote: >> But. The above regex does not seem to handle >> >> if ((a = b)); >> oops; >> >> I have tried to come up with a superduper regex that handles multiple >> (), but my regex fu seems to stop above two pairs of (). > >This is because you can't do that using finite regular expressions. > >Regular expressions are Type-3 grammars, but you'd need a Type-2 >grammar to express the Dyck language (and you need to parse a Dyck >Language, ignoring the non-dyck-parts). So what about this then... $s = shift @ARGV; $r = qr/a(??{ $r })?b/; if ($s =~ /^$r$/) { print "Yup, that's good\n"; } else { print "fail\n"; } $ perl foo.pl aa Not so much $ perl foo.pl Yup, that's good $ perl foo.pl a Not so much >-- >Your e-mail has been returned due to insufficient voltage. > >Friß, Spammer: [EMAIL PROTECTED] [EMAIL PROTECTED] > [EMAIL PROTECTED] [EMAIL PROTECTED] >- >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >the body of a message to [EMAIL PROTECTED] >More majordomo info at http://vger.kernel.org/majordomo-info.html >Please read the FAQ at http://www.tux.org/lkml/ > Jan --
Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
Jan Engelhardt <[EMAIL PROTECTED]> wrote: > On Aug 16 2007 10:21, Andy Whitcroft wrote: >>> + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { >> >>Heh, you are the second person to suggest this check today, do I detect >>some ripped out hair due to one of these! >> >>I've taken this idea and expanded it to cover if, for and while which >>can all suffer from this. Using the relative indent to work out which >>are valid combinations: > > But. The above regex does not seem to handle > > if ((a = b)); > oops; > > I have tried to come up with a superduper regex that handles multiple > (), but my regex fu seems to stop above two pairs of (). This is because you can't do that using finite regular expressions. Regular expressions are Type-3 grammars, but you'd need a Type-2 grammar to express the Dyck language (and you need to parse a Dyck Language, ignoring the non-dyck-parts). -- Your e-mail has been returned due to insufficient voltage. Friß, Spammer: [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
Jan Engelhardt [EMAIL PROTECTED] wrote: On Aug 16 2007 10:21, Andy Whitcroft wrote: + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { Heh, you are the second person to suggest this check today, do I detect some ripped out hair due to one of these! I've taken this idea and expanded it to cover if, for and while which can all suffer from this. Using the relative indent to work out which are valid combinations: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). This is because you can't do that using finite regular expressions. Regular expressions are Type-3 grammars, but you'd need a Type-2 grammar to express the Dyck language (and you need to parse a Dyck Language, ignoring the non-dyck-parts). -- Your e-mail has been returned due to insufficient voltage. Friß, Spammer: [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
On Aug 20 2007 13:52, Bodo Eggert wrote: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). This is because you can't do that using finite regular expressions. Regular expressions are Type-3 grammars, but you'd need a Type-2 grammar to express the Dyck language (and you need to parse a Dyck Language, ignoring the non-dyck-parts). So what about this then... $s = shift @ARGV; $r = qr/a(??{ $r })?b/; if ($s =~ /^$r$/) { print Yup, that's good\n; } else { print fail\n; } $ perl foo.pl aa Not so much $ perl foo.pl Yup, that's good $ perl foo.pl a Not so much -- Your e-mail has been returned due to insufficient voltage. Friß, Spammer: [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ Jan --
Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
On Aug 16 2007 10:21, Andy Whitcroft wrote: >> +if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { > >Heh, you are the second person to suggest this check today, do I detect >some ripped out hair due to one of these! > >I've taken this idea and expanded it to cover if, for and while which >can all suffer from this. Using the relative indent to work out which >are valid combinations: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). #!/usr/bin/perl @check = ( q"if ((ptr = malloc(bong, GFP)) == NULL) ; (oopsie) ;", q"if ((ptr = malloc(bong, GFP)) == NULL)(alright);", q"if ( ({ bool evil = (true); evil; }) ) ; (oopsie) ;", q"if ( ({ bool evil = (true); evil; }) ) (alright);", q"if((()));", ); my $r = qr/\s*\(\s*(??{$r})?\s*\)\s*|\s*\(\s*[^()]+\s*\)\s*/; foreach (@check) { if ($_ =~ /(if|for|while)$r;/) { print "ok $_\n"; } } Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
On Aug 16 2007 10:21, Andy Whitcroft wrote: +if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { Heh, you are the second person to suggest this check today, do I detect some ripped out hair due to one of these! I've taken this idea and expanded it to cover if, for and while which can all suffer from this. Using the relative indent to work out which are valid combinations: But. The above regex does not seem to handle if ((a = b)); oops; I have tried to come up with a superduper regex that handles multiple (), but my regex fu seems to stop above two pairs of (). #!/usr/bin/perl @check = ( qif ((ptr = malloc(bong, GFP)) == NULL) ; (oopsie) ;, qif ((ptr = malloc(bong, GFP)) == NULL)(alright);, qif ( ({ bool evil = (true); evil; }) ) ; (oopsie) ;, qif ( ({ bool evil = (true); evil; }) ) (alright);, qif((()));, ); my $r = qr/\s*\(\s*(??{$r})?\s*\)\s*|\s*\(\s*[^()]+\s*\)\s*/; foreach (@check) { if ($_ =~ /(if|for|while)$r;/) { print ok $_\n; } } Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
Eugene Teo wrote: > Make checkpatch rant about trailing ; at the end of "if" expression. > > Thanks to Auke for the regexp. > > Signed-off by: Eugene Teo <[EMAIL PROTECTED]> > > --- checkpatch.pl-0.09.default2007-08-03 23:31:40.0 +0800 > +++ checkpatch.pl-0.092007-08-16 13:18:40.0 +0800 > @@ -1091,6 +1091,12 @@ sub process { > CHK("__setup appears un-documented -- check > Documentation/kernel-parameters.txt\n" . $herecurr); > } > } > + > +# checks for trailing ; at the end of "if" expression > + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { > + my $herevet = "$here\n" . cat_vet($line) . "\n"; > + ERROR("trailing ;\n" . $herevet); > + } > } > > if ($chk_patch && !$is_patch) { Heh, you are the second person to suggest this check today, do I detect some ripped out hair due to one of these! I've taken this idea and expanded it to cover if, for and while which can all suffer from this. Using the relative indent to work out which are valid combinations: WARNING: Trailing semicolon indicates no statements, indent implies otherwise #28: FILE: Z17.c:25: + if (foo); + return 10; WARNING: Trailing semicolon indicates no statements, indent implies otherwise #31: FILE: Z17.c:28: + for (a; b; c); + a += *b; Thanks for the patch. -apw - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] Make checkpatch rant about trailing ; at the end of "if" expr
Make checkpatch rant about trailing ; at the end of "if" expression. Thanks to Auke for the regexp. Signed-off by: Eugene Teo <[EMAIL PROTECTED]> --- checkpatch.pl-0.09.default 2007-08-03 23:31:40.0 +0800 +++ checkpatch.pl-0.09 2007-08-16 13:18:40.0 +0800 @@ -1091,6 +1091,12 @@ sub process { CHK("__setup appears un-documented -- check Documentation/kernel-parameters.txt\n" . $herecurr); } } + +# checks for trailing ; at the end of "if" expression + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { + my $herevet = "$here\n" . cat_vet($line) . "\n"; + ERROR("trailing ;\n" . $herevet); + } } if ($chk_patch && !$is_patch) { - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] Make checkpatch rant about trailing ; at the end of if expr
Make checkpatch rant about trailing ; at the end of if expression. Thanks to Auke for the regexp. Signed-off by: Eugene Teo [EMAIL PROTECTED] --- checkpatch.pl-0.09.default 2007-08-03 23:31:40.0 +0800 +++ checkpatch.pl-0.09 2007-08-16 13:18:40.0 +0800 @@ -1091,6 +1091,12 @@ sub process { CHK(__setup appears un-documented -- check Documentation/kernel-parameters.txt\n . $herecurr); } } + +# checks for trailing ; at the end of if expression + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { + my $herevet = $here\n . cat_vet($line) . \n; + ERROR(trailing ;\n . $herevet); + } } if ($chk_patch !$is_patch) { - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Make checkpatch rant about trailing ; at the end of if expr
Eugene Teo wrote: Make checkpatch rant about trailing ; at the end of if expression. Thanks to Auke for the regexp. Signed-off by: Eugene Teo [EMAIL PROTECTED] --- checkpatch.pl-0.09.default2007-08-03 23:31:40.0 +0800 +++ checkpatch.pl-0.092007-08-16 13:18:40.0 +0800 @@ -1091,6 +1091,12 @@ sub process { CHK(__setup appears un-documented -- check Documentation/kernel-parameters.txt\n . $herecurr); } } + +# checks for trailing ; at the end of if expression + if ($line =~ /\bif\s*\([^\)]*\)\s*\;/) { + my $herevet = $here\n . cat_vet($line) . \n; + ERROR(trailing ;\n . $herevet); + } } if ($chk_patch !$is_patch) { Heh, you are the second person to suggest this check today, do I detect some ripped out hair due to one of these! I've taken this idea and expanded it to cover if, for and while which can all suffer from this. Using the relative indent to work out which are valid combinations: WARNING: Trailing semicolon indicates no statements, indent implies otherwise #28: FILE: Z17.c:25: + if (foo); + return 10; WARNING: Trailing semicolon indicates no statements, indent implies otherwise #31: FILE: Z17.c:28: + for (a; b; c); + a += *b; Thanks for the patch. -apw - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/