- Timestamp:
- 11/10/08 23:30:30 (2 months ago)
- Location:
- misc/elfish/STD_blue
- Files:
-
- 3 modified
-
IRx1_FromAST2_create.pl (modified) (10 diffs)
-
Makefile (modified) (1 diff)
-
STD_blue_run (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
misc/elfish/STD_blue/IRx1_FromAST2_create.pl
r22601 r22964 28 28 } 29 29 30 nulltermish 31 $m<termish>[0] 32 33 termish 34 my $noun = $m<noun>; 35 temp $blackboard::expect_term_base = $noun; 36 my $ops = []; 37 if $o<PRE> { $ops.push($o<PRE>.flatten) }; 38 if $o<POST> { $ops.push($o<POST>.flatten) }; 39 for $ops { 40 $blackboard::expect_term_base = ir($_) 41 } 42 $blackboard::expect_term_base 43 30 44 EXPR 31 if $o<termish> { 32 $m<termish>[0] 33 } 34 elsif $o<arg> { 35 $m<arg> 36 } 37 elsif $o<infix> { 45 if $o<infix> { 38 46 my $op = $m<infix><sym_name>; 39 47 my $args = [$m<left>,$m<right>]; … … 51 59 } 52 60 } 61 elsif $o<prefix> { 62 my $op = $m<prefix><sym_name>; 63 Apply.newp("prefix:"~$op,Capture.newp1([$m<arg>])) 64 } 53 65 elsif $o<chain> { 54 66 my $chain = $m<chain>; … … 62 74 Apply.newp("infix:"~$op,Capture.newp1($args)) 63 75 } 76 elsif $o<value> { 77 $m<value> 78 } 64 79 elsif $o<noun> { 65 temp $blackboard::expect_term_base = $m<noun>; 66 my $ops = []; 67 if $o<pre> { 68 my $pre = $o<pre>; 69 my $kludge; 70 $pre = $pre.map(sub($x){ 71 if $x<sym_name> && $x<sym_name> eq 'temp' { 72 my $scope = 'temp'; 73 my $typenames = undef; 74 my $variable = $m<noun>; 75 my $traits = undef; 76 my $default_value = undef; 77 $kludge = VarDecl.newp($scope,$typenames,undef,$variable,undef,$traits,'=',$m<default_value>) 78 } 79 $x; 80 }); 81 if $kludge { return $kludge } 82 $ops.push($pre.flatten) 83 }; 84 if $o<post> { $ops.push($o<post>.flatten) }; 85 for $ops { 86 $blackboard::expect_term_base = ir($_) 87 } 88 $blackboard::expect_term_base 89 } 90 elsif $o<left> { #XX temp hack for vanished 'infix'. 91 my $args = [$m<left>,$m<right>]; 92 my $op = "="; 93 if $op eq '=' && $args[0].WHAT.re_matchp('VarDecl') { 94 # To simplify elf_h STD_red vs STD_blue diffs. 95 $args[0].default_expr = $args[1]; 96 $args[0]; 97 } else { 98 Apply.newp("infix:"~$op,Capture.newp1($args)) 99 } 80 $m<noun> 81 } 82 elsif $o<dotty> { 83 temp $blackboard::expect_term_base = $m<arg>; 84 $m<dotty>; 85 } 86 elsif $o<postop> { 87 temp $blackboard::expect_term_base = $m<arg>; 88 $m<postop>; 100 89 } 101 90 else { die "Didn't understand an EXPR node" } 102 91 103 pre 92 PRE 104 93 $m<prefix> 105 94 106 post 95 POST 107 96 $m<postop> || $m<dotty> 108 97 … … 114 103 my $name = "prefix:"~$op; 115 104 if $op.re_matchp('\A\w+\z') { $name = $op } 116 Apply.newp($name,Capture.newp1([$blackboard::expect_term_base])) 105 if $op eq 'temp' { 106 my $scope = 'temp'; 107 my $typenames = undef; 108 my $variable = $blackboard::expect_term_base; 109 my $traits = undef; 110 my $default_value = undef; 111 VarDecl.newp($scope,$typenames,undef,$variable,undef,$traits,'=',$default_value) 112 } else { 113 Apply.newp($name,Capture.newp1([$blackboard::expect_term_base])) 114 } 117 115 118 116 postfix … … 123 121 my $name = $m<sym_name>; 124 122 my $ident = "postcircumfix:"~$name; 125 my $args = $m<semilist> ;123 my $args = $m<semilist> || $m<nibble>; 126 124 if $args && ($args.WHAT ne 'Array') { $args = [$args] } 127 125 Call.newp($blackboard::expect_term_base,$ident,Capture.newp1($args||[])) … … 132 130 if $args && ($args.WHAT ne 'Array') { $args = [$args] } 133 131 Apply.newp("circumfix:"~$op,Capture.newp1($args||[])) 132 133 infix 134 my $op = $m<sym_name>; 135 $op; 134 136 135 137 semilist … … 159 161 $m<fatarrow> || $m<variable> || $m<package_declarator> || $m<scope_declarator> || $m<multi_declarator> || $m<routine_declarator> || $m<regex_declarator> || $m<type_declarator> || $m<circumfix> || $m<dotty> || $m<value> || $m<capterm> || $m<sigterm> || $m<term> || $m<statement_prefi> || $m<colonpair> 160 162 163 infixish 164 $m<colonpair> || $m<infix> || $m<infix_prefix_meta_operator> || $m<infix_circumfix_meta_operator> || $m<infix> 161 165 162 166 desigilname … … 188 192 189 193 integer 194 NumInt.newp(*text*,10) 195 196 dec_number 190 197 NumInt.newp(*text*,10) 191 198 … … 348 355 Cond.newp([[$if_expr,$if_block]].push($elsif.flatten),$els,undef) 349 356 350 elsif357 statement_control__S_036if_elsif 351 358 [$m<xblock><EXPR>,$m<xblock><pblock>] 352 359 … … 494 501 else { die "capture AST form not recognized" } 495 502 503 nibbler 504 #XXX I've sooo no idea. 505 $m<nibbles>[0] 506 496 507 colonpair 497 *1* 508 my $v = $m<v>; 509 if $o<v><nibble> { #XXX :x<2> bypass postcircumfix:< >. 510 $v = $o<v><nibble><nibbles>[0]; 511 $v = Buf.newp($v) 512 } 513 my $k = $m<k>; # or $m<identifier> ? 514 Pair.newp($k,$v) 498 515 499 516 colonpair__false -
misc/elfish/STD_blue/Makefile
r22593 r22964 1 1 2 elfx:: 2 ELF=../../elf/elf_h 3 ELFDIR=../../elf/elf_h_src 4 TMP=deleteme 5 6 elfx:: have_parser_cache 3 7 ./IRx1_FromAST2_create.pl 4 8 ../../elf/elf_h -x -o ./elfx -I ../../elf/elf_h_src -e 'use Elf_wo_main' IRx1_FromAST2.pm Parser2.pm -e elf_main 9 10 11 check: have_parser_cache 12 # Remove STD.pm/gimme5 cruft. 13 -rm -rf lex 14 # Remove remains of previous runs. 15 -mkdir ${TMP} 16 -rm ${TMP}/[a]* 17 # Create a STD_blue based elf. 18 make elfx 19 # Use it to compile a normal elf. 20 ./elfx -I ${ELFDIR} -x -o ${TMP}/a1 ${ELFDIR}/Elf.pm 21 # Test the normal elf by using it to self-compile. 22 ./elfx -I ${ELFDIR} -x -o ${TMP}/a2 ${ELFDIR}/Elf.pm 23 # Create a reference elf. 24 ${ELF} -I ${ELFDIR} -x -o ${TMP}/a0 ${ELFDIR}/Elf.pm 25 # Were they the same? 26 diff ${TMP}/a0 ${TMP}/a2 27 @echo ok 28 29 30 have_parser_cache: 31 @perl -e 'if(!-d shift){print STDERR "\nDefine STD_RED_CACHEDIR for faster compiles.\n\n";}' $(STD_RED_CACHEDIR) -
misc/elfish/STD_blue/STD_blue_run
r22595 r22964 92 92 #use YAML::XS; 93 93 #print Dump($r); 94 #use Data::Dumper;95 #print Dumper($r);96 use DumpMatch; #src/perl6/STD5_dump_match97 print dump_match("comp_unit",$r,{vertical=>1});94 use Data::Dumper; 95 print Dumper($r); 96 # use DumpMatch; #src/perl6/STD5_dump_match 97 # print dump_match("comp_unit",$r,{vertical=>1}); 98 98 } 99 99 elsif($format eq 'p5a') { 100 $main::whole_file = $code; 101 $main::whole_file .= " "; # -e '3' dump includes _pos's of 2 100 102 print out($cache_file,$r->to_dump0); 101 103 } … … 141 143 else { die "bogus sym: $sym\n" } 142 144 } 143 our $category = 'comp_unit';144 145 our %seen; 145 146 our $max_repetition = 20; … … 148 149 local $seen{$o} = $seen{$o}; 149 150 if($seen{$o}++ > $max_repetition) { return "LOOP:$o"->to_dump0 } 150 my $rule = $category; 151 if($rule =~ /\A(chain|list|arg|left|right|termish)\z/) { $rule = 'EXPR' } 151 152 my $rule = $o->{_reduced} || die; 153 154 my $f = $o->{_from}; 155 my $t = $o->{_pos}; 156 my $str = substr($main::whole_file,$f,$t-$f); 157 152 158 my $sym = $o->{sym}; 159 if($sym && $sym eq ';') { 160 # Workaround bug in STD/gimme5 r22962. 161 # -e 'last;' -> term:sym<;> instead of term:sym<last>. 162 $sym = $str; 163 } 153 164 if($sym) { 154 165 my $normalized = $o->condition_sym($sym); 155 166 $o->{sym_name} = $normalized; 156 $rule .= ":".$normalized if $sym ne $rule && $rule ne 'EXPR'; 167 $rule .= ":".$normalized if ($sym ne $rule && 168 $rule ne 'EXPR' && 169 $rule ne 'infixish'); 157 170 } 158 171 my $rule_str = $rule->to_dump0; 159 my $f = $o->{_from};160 my $t = $o->{_to};161 my $whole_file = ${$o->{_orig}};162 my $str = substr($whole_file,$f,$t-$f);163 172 my $s = $str->to_dump0; 164 173 my $h = join("",map{ … … 167 176 else { 168 177 my $v = $o->{$_}; 169 local $category = $_;170 178 my $vs = defined($v) ? $v->to_dump0 : 'undef'; 171 179 "\n $_ => $vs,"
