Changeset 18681
- Timestamp:
- 10/26/07 12:32:12 (13 months ago)
- Location:
- src
- Files:
-
- 3 modified
-
Pugs/Parser/Operator.hs (modified) (3 diffs)
-
perl5/p5embed.c (modified) (1 diff)
-
perl6/Cursor.pm (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Parser/Operator.hs
r17701 r18681 48 48 : multLevel -- Multiplicative 49 49 : Map.foldWithKey foldInfix addiLevel (r_infix tights) -- Additive (user-definable) 50 : replLevel -- Replication 51 : concLevel -- Concatenation 50 52 : junaLevel -- Junctive And 51 53 : junoLevel -- Junctive Or … … 66 68 -- _ -> error $ "Impossible: " ++ show op ++ " has no assoc?" 67 69 68 termLevel, methLevel, incrLevel, expoLevel, symbLevel, multLevel, addiLevel, junaLevel, junoLevel :: [RuleOperator Exp]70 termLevel, methLevel, incrLevel, expoLevel, symbLevel, multLevel, addiLevel, replLevel, concLevel, junaLevel, junoLevel :: [RuleOperator Exp] 69 71 termLevel = circumOps (Set.singleton (MkOpName (cast "\\( )"))) 70 72 methLevel = methOps (opWords " . .+ .? .* .+ .() .[] .{} .<<>> .= ") … … 72 74 expoLevel = rightOps (opWords " ** ") 73 75 symbLevel = preSyn (Set.singleton (MkOpName (cast "|"))) ++ preOps symbPreops 74 multLevel = leftOps (opWords " * / % x xx +& +< +> ~& ~< ~> ?& ") 75 addiLevel = leftOps (opWords " + - ~ +| +^ ~| ~^ ?| ") 76 multLevel = leftOps (opWords " * / % +& +< +> ~& ~< ~> ?& ") 77 addiLevel = leftOps (opWords " + - +| +^ ~| ~^ ?| ") 78 replLevel = leftOps (opWords " x xx ") 79 concLevel = leftOps (opWords " ~ ") 76 80 junaLevel = listOps (opWords " & ") 77 81 junoLevel = listOps (opWords " ^ | ") -
src/perl5/p5embed.c
r14622 r18681 314 314 #endif 315 315 #ifdef PERL_SYS_INIT3 316 PERL_SYS_INIT3(&argc,&argv,&env );316 PERL_SYS_INIT3(&argc,&argv,&environ); 317 317 #endif 318 318 -
src/perl6/Cursor.pm
r18294 r18681 8 8 # most cursors just copy forward the previous value of the following two items: 9 9 has $.orig; # per match, the original string we are matching against 10 our %lexer ; # per language, the cache of lexers, keyed by (|) location10 our %lexers; # per language, the cache of lexers, keyed by (|) location 11 11 12 12 has Bool $.bool is rw = 1; … … 19 19 has $!item; 20 20 21 method lexer { %lexer} # XXX should be different per language, sigh21 method lexers { %lexers } # XXX should be different per language, sigh 22 22 23 23 my $fakepos = 1; … … 25 25 method _AUTOLEXpeek ($key) { 26 26 die "Null key" if $key eq ''; 27 if %.lexer {$key} {27 if %.lexers{$key} { 28 28 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"; 30 31 return -> $¢ { '' }; # (but if we advanced just assume a :: here) 31 32 } 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 } 36 39 } 37 40 my $ast = eval("tmpyaml/$key.yml".slurp, :lang<yaml>); 38 %.lexer {$key} = hash(:$ast, :lexer(-> $¢ { '' }));41 %.lexers{$key} = hash(:$ast, :lexer(-> $¢ { '' })); 39 42 my $lexer = self._AUTOLEXgen($key,$ast); 40 %.lexer {$key}<lexer> = $lexer;43 %.lexers{$key}<lexer> = $lexer; 41 44 return $lexer; 42 45 } 43 46 44 47 method _AUTOLEXnow ($key) { 45 if %.lexer .exists($key) {46 return %.lexer {$key}<lexer>;48 if %.lexers.exists($key) { 49 return %.lexers{$key}<lexer>; 47 50 } 48 51 my %AUTOLEXED is context<rw>; 49 52 my $ast = eval("tmpyaml/$key.yml".slurp, :lang<yaml>); 50 %.lexer {$key} = hash(:$ast, :lexer(undef));53 %.lexers{$key} = hash(:$ast, :lexer(undef)); 51 54 my $lexer = self._AUTOLEXgen($key,$ast); 52 %.lexer {$key}<lexer> = $lexer;55 %.lexers{$key}<lexer> = $lexer; 53 56 return $lexer; 54 57 } … … 60 63 %+AUTOLEXED{$key} = $oldfakepos; 61 64 sub ($¢) { 65 1 while $lexer ~~ s:P5/\n[\x20\t]*\n/\n/; 62 66 $lexer; 63 67 } … … 106 110 my $r = self.new( 107 111 :orig(self.orig), 108 #:lexer (self.lexer),112 #:lexers(self.lexers), 109 113 :from($fpos), 110 114 :to($tpos), … … 120 124 self.new( 121 125 :orig(self.orig), 122 #:lexer (self.lexer),126 #:lexers(self.lexers), 123 127 :from(self.pos // 0), 124 128 :to($tpos), … … 132 136 self.new( 133 137 :orig(self.orig), 134 #:lexer (self.lexer),138 #:lexers(self.lexers), 135 139 :pos($fpos), 136 140 :from($fpos), … … 719 723 720 724 our 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)") } 722 726 } 723 727 … … 791 795 when 'sym' { 792 796 $fakepos++; 793 return self.<sym>;797 return quotemeta(self.<sym>); 794 798 } 795 799 when 'alpha' { … … 839 843 840 844 our 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 } 842 863 } 843 864 … … 880 901 881 902 our 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)") } 883 904 } 884 905 … … 946 967 last unless $PURE; 947 968 } 948 join ' ', @result;969 join ' ', @result; 949 970 } 950 971 } … … 952 973 our class RE_string is REbase { 953 974 # XXX needs quoting 954 method lexer ($ ¢) {975 method lexer ($c) { 955 976 here ~self.<text>; 956 977 my $text = self.<text>; 957 978 $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); 961 980 } 962 981 } … … 987 1006 $minfakepos = $oldfakepos if $fakepos == $oldfakepos; 988 1007 } 989 my $result = " (\n" ~ indent(join "\n| ", @result) ~ "\n)";1008 my $result = "\n(\n " ~ indent(join "\n| ", @result) ~ "\n)"; 990 1009 say $result; 991 1010 $fakepos = $minfakepos; # Did all branches advance?
