Changeset 18681

Show
Ignore:
Timestamp:
10/26/07 12:32:12 (13 months ago)
Author:
lwall
Message:

Cursor tweaks, new precedence for x and ~

Location:
src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Parser/Operator.hs

    r17701 r18681  
    4848    : multLevel                     -- Multiplicative 
    4949    : Map.foldWithKey foldInfix addiLevel (r_infix tights) -- Additive (user-definable) 
     50    : replLevel                     -- Replication 
     51    : concLevel                     -- Concatenation 
    5052    : junaLevel                     -- Junctive And 
    5153    : junoLevel                     -- Junctive Or 
     
    6668        -- _ -> error $ "Impossible: " ++ show op ++ " has no assoc?" 
    6769 
    68 termLevel, methLevel, incrLevel, expoLevel, symbLevel, multLevel, addiLevel, junaLevel, junoLevel :: [RuleOperator Exp] 
     70termLevel, methLevel, incrLevel, expoLevel, symbLevel, multLevel, addiLevel, replLevel, concLevel, junaLevel, junoLevel :: [RuleOperator Exp] 
    6971termLevel = circumOps (Set.singleton (MkOpName (cast "\\( )"))) 
    7072methLevel = methOps (opWords " . .+ .? .* .+ .() .[] .{} .<<>> .= ") 
     
    7274expoLevel = rightOps (opWords " ** ") 
    7375symbLevel = preSyn (Set.singleton (MkOpName (cast "|"))) ++ preOps symbPreops 
    74 multLevel = leftOps (opWords " * / % x xx +& +< +> ~& ~< ~> ?& ") 
    75 addiLevel = leftOps (opWords " + - ~ +| +^ ~| ~^ ?| ") 
     76multLevel = leftOps (opWords " * / % +& +< +> ~& ~< ~> ?& ") 
     77addiLevel = leftOps (opWords " + - +| +^ ~| ~^ ?| ") 
     78replLevel = leftOps (opWords " x xx ") 
     79concLevel = leftOps (opWords " ~ ") 
    7680junaLevel = listOps (opWords " & ") 
    7781junoLevel = listOps (opWords " ^ | ") 
  • src/perl5/p5embed.c

    r14622 r18681  
    314314#endif 
    315315#ifdef PERL_SYS_INIT3 
    316     PERL_SYS_INIT3(&argc,&argv,&env); 
     316    PERL_SYS_INIT3(&argc,&argv,&environ); 
    317317#endif 
    318318 
  • src/perl6/Cursor.pm

    r18294 r18681  
    88# most cursors just copy forward the previous value of the following two items: 
    99has $.orig;        # per match, the original string we are matching against 
    10 our %lexer;       # per language, the cache of lexers, keyed by (|) location 
     10our %lexers;       # per language, the cache of lexers, keyed by (|) location 
    1111 
    1212has Bool $.bool is rw = 1; 
     
    1919has $!item; 
    2020 
    21 method lexer { %lexer }   # XXX should be different per language, sigh 
     21method lexers { %lexers }   # XXX should be different per language, sigh 
    2222 
    2323my $fakepos = 1; 
     
    2525method _AUTOLEXpeek ($key) { 
    2626    die "Null key" if $key eq ''; 
    27     if %.lexer{$key} { 
     27    if %.lexers{$key} { 
    2828        if %+AUTOLEXED{$key} {   # no left recursion allowed in lexer! 
    29             die "left recursion in $key" if $fakepos == %+AUTOLEXED{$key}; 
     29            die "Left recursion in $key" if $fakepos == %+AUTOLEXED{$key}; 
     30            warn "Suppressing lexer recursion on $key"; 
    3031            return -> $¢ { '' };  # (but if we advanced just assume a :: here) 
    3132        } 
    32         elsif %.lexer{$key}.WHAT eq Hash { 
    33             return %.lexer{$key}<lexer> // -> $¢ { '' }; 
    34         } 
    35         say "oops ", $key.WHAT; 
     33        elsif %.lexers{$key}.WHAT eq Hash { 
     34            return %.lexers{$key}<lexer> // -> $¢ { '' }; 
     35        } 
     36        else { 
     37            say "oops ", $key.WHAT; 
     38        } 
    3639    } 
    3740    my $ast = eval("tmpyaml/$key.yml".slurp, :lang<yaml>); 
    38     %.lexer{$key} = hash(:$ast, :lexer(-> $¢ { '' })); 
     41    %.lexers{$key} = hash(:$ast, :lexer(-> $¢ { '' })); 
    3942    my $lexer = self._AUTOLEXgen($key,$ast); 
    40     %.lexer{$key}<lexer> = $lexer; 
     43    %.lexers{$key}<lexer> = $lexer; 
    4144    return $lexer; 
    4245} 
    4346 
    4447method _AUTOLEXnow ($key) { 
    45     if %.lexer.exists($key) { 
    46         return %.lexer{$key}<lexer>; 
     48    if %.lexers.exists($key) { 
     49        return %.lexers{$key}<lexer>; 
    4750    } 
    4851    my %AUTOLEXED is context<rw>; 
    4952    my $ast = eval("tmpyaml/$key.yml".slurp, :lang<yaml>); 
    50     %.lexer{$key} = hash(:$ast, :lexer(undef)); 
     53    %.lexers{$key} = hash(:$ast, :lexer(undef)); 
    5154    my $lexer = self._AUTOLEXgen($key,$ast); 
    52     %.lexer{$key}<lexer> = $lexer; 
     55    %.lexers{$key}<lexer> = $lexer; 
    5356    return $lexer; 
    5457} 
     
    6063    %+AUTOLEXED{$key} = $oldfakepos; 
    6164    sub ($¢) { 
     65        1 while $lexer ~~ s:P5/\n[\x20\t]*\n/\n/; 
    6266        $lexer; 
    6367    } 
     
    106110    my $r = self.new( 
    107111        :orig(self.orig), 
    108         #:lexer(self.lexer), 
     112        #:lexers(self.lexers), 
    109113        :from($fpos), 
    110114        :to($tpos), 
     
    120124    self.new( 
    121125        :orig(self.orig), 
    122         #:lexer(self.lexer), 
     126        #:lexers(self.lexers), 
    123127        :from(self.pos // 0), 
    124128        :to($tpos), 
     
    132136    self.new( 
    133137        :orig(self.orig), 
    134         #:lexer(self.lexer), 
     138        #:lexers(self.lexers), 
    135139        :pos($fpos), 
    136140        :from($fpos), 
     
    719723 
    720724our class RE_bracket is REbase { 
    721     method lexer ($¢) { here; "(\n" ~ indent(self.<re>.lexer($¢)) ~ "\n)" } 
     725    method lexer ($¢) { here; indent("\n(\n" ~ indent(self.<re>.lexer($¢)) ~ "\n)") } 
    722726} 
    723727 
     
    791795            when 'sym' { 
    792796                $fakepos++; 
    793                 return self.<sym>; 
     797                return quotemeta(self.<sym>); 
    794798            } 
    795799            when 'alpha' { 
     
    839843 
    840844our class RE_method_str is REbase { 
    841     #method lexer ($¢) { ... } 
     845    method lexer ($¢) { 
     846        my $name = self.<name>; 
     847        here $name; 
     848        my $str = self.<str>; 
     849        given $name { 
     850            when 'lex1' { 
     851                return '[]'; 
     852            } 
     853            when 'panic' | 'obs' { 
     854                $+PURE = 0; 
     855                return ''; 
     856            } 
     857            default { 
     858                my $lexer = $¢.$name($str, '?')[0]; 
     859                return $lexer($¢); 
     860            } 
     861        } 
     862    } 
    842863} 
    843864 
     
    880901 
    881902our class RE_paren is REbase { 
    882     method lexer ($¢) { here; "(\n" ~ indent(self.<re>.lexer($¢)) ~ "\n)" } 
     903    method lexer ($¢) { here; indent("\n(\n" ~ indent(self.<re>.lexer($¢)) ~ "\n)") } 
    883904} 
    884905 
     
    946967            last unless $PURE; 
    947968        } 
    948         join '', @result; 
     969        join ' ', @result; 
    949970    } 
    950971} 
     
    952973our class RE_string is REbase { 
    953974    # XXX needs quoting 
    954     method lexer ($¢) { 
     975    method lexer ($c) { 
    955976        here ~self.<text>; 
    956977        my $text = self.<text>; 
    957978        $fakepos++ if self.<min>; 
    958         $text ~~ s:P5:g/([][\\*+?.^${}<>()]#)/\\$0/; 
    959         $text ~~ s:P5:g/\s/\\s/;  # XXX bogus, but who uses ws in tokens? 
    960         $text; 
     979        quotemeta($text); 
    961980    } 
    962981} 
     
    9871006            $minfakepos = $oldfakepos if $fakepos == $oldfakepos; 
    9881007        } 
    989         my $result = "(\n" ~ indent(join "\n| ", @result) ~ "\n)"; 
     1008        my $result = "\n(\n  " ~ indent(join "\n| ", @result) ~ "\n)"; 
    9901009        say $result; 
    9911010        $fakepos = $minfakepos;  # Did all branches advance?