- 论坛徽章:
- 7
|
本帖最后由 rubyish 于 2013-11-08 20:24 编辑
凑合:- #!/usr/bin/perl
- sub new { "( quote @_ )" }
- while (<DATA>) {
- chomp;
- my @line = grep $_, split /\s*([(')])\s*/;
- my @Qindex = grep $line[$_] eq "'", 0 .. $#line;
- for my $q ( reverse @Qindex ) {
- $line[ $q + 1 ] ne '('
- and splice @line, $q, 2, new $line[ $q + 1 ]
- and next;
- my $open = 1;
- for my $i ( $q + 2 .. $#line ) {
- $open-- if $line[$i] eq ')';
- $open++ if $line[$i] eq '(';
- !$open
- and splice @line, $q, $i - $q + 1, new @line[ $q + 1 .. $i ]
- and last;
- }
- }
- print "OLD\t$_\n";
- print "NEW\t", join( ' ', @line ), $/;
- print '-' x 90, $/;
- }
- __DATA__
- a
- 'a
- ''a
- (a b)
- '(a b)
- ''(a b)
- abc 'abc (a b c) '(a b c) ''(a b c) abc
- (if (> 1 2) (print '(list ''(a b))))
复制代码- OLD a
- NEW a
- ------------------------------------------------------------------------------------------
- OLD 'a
- NEW ( quote a )
- ------------------------------------------------------------------------------------------
- OLD ''a
- NEW ( quote ( quote a ) )
- ------------------------------------------------------------------------------------------
- OLD (a b)
- NEW ( a b )
- ------------------------------------------------------------------------------------------
- OLD '(a b)
- NEW ( quote ( a b ) )
- ------------------------------------------------------------------------------------------
- OLD ''(a b)
- NEW ( quote ( quote ( a b ) ) )
- ------------------------------------------------------------------------------------------
- OLD abc 'abc (a b c) '(a b c) ''(a b c) abc
- NEW abc ( quote abc ) ( a b c ) ( quote ( a b c ) ) ( quote ( quote ( a b c ) ) ) abc
- ------------------------------------------------------------------------------------------
- OLD (if (> 1 2) (print '(list ''(a b))))
- NEW ( if ( > 1 2 ) ( print ( quote ( list ( quote ( quote ( a b ) ) ) ) ) ) )
- ------------------------------------------------------------------------------------------
复制代码 |
|