Changeset 22964 for misc

Show
Ignore:
Timestamp:
11/10/08 23:30:30 (2 months ago)
Author:
putter
Message:

[elfish/STD_blue] Began adaptation to current STD.pm/gimme5 (r22962).
Progress: CommandLine?.pm is compiled correctly (1 diff: not() is parsed as prefix:not()).

Location:
misc/elfish/STD_blue
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • misc/elfish/STD_blue/IRx1_FromAST2_create.pl

    r22601 r22964  
    2828} 
    2929 
     30nulltermish 
     31$m<termish>[0] 
     32 
     33termish 
     34my $noun = $m<noun>; 
     35temp $blackboard::expect_term_base = $noun; 
     36my $ops = []; 
     37if $o<PRE> { $ops.push($o<PRE>.flatten) }; 
     38if $o<POST> { $ops.push($o<POST>.flatten) }; 
     39for $ops { 
     40  $blackboard::expect_term_base = ir($_) 
     41} 
     42$blackboard::expect_term_base 
     43 
    3044EXPR 
    31 if $o<termish> { 
    32   $m<termish>[0] 
    33 } 
    34 elsif $o<arg> { 
    35   $m<arg> 
    36 } 
    37 elsif $o<infix> { 
     45if $o<infix> { 
    3846  my $op = $m<infix><sym_name>; 
    3947  my $args = [$m<left>,$m<right>]; 
     
    5159  } 
    5260} 
     61elsif $o<prefix> { 
     62  my $op = $m<prefix><sym_name>; 
     63  Apply.newp("prefix:"~$op,Capture.newp1([$m<arg>])) 
     64} 
    5365elsif $o<chain> { 
    5466  my $chain = $m<chain>; 
     
    6274  Apply.newp("infix:"~$op,Capture.newp1($args)) 
    6375} 
     76elsif $o<value> { 
     77  $m<value> 
     78} 
    6479elsif $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} 
     82elsif $o<dotty> { 
     83  temp $blackboard::expect_term_base = $m<arg>; 
     84  $m<dotty>; 
     85} 
     86elsif $o<postop> { 
     87  temp $blackboard::expect_term_base = $m<arg>; 
     88  $m<postop>; 
    10089} 
    10190else { die "Didn't understand an EXPR node" } 
    10291 
    103 pre 
     92PRE 
    10493$m<prefix> 
    10594 
    106 post 
     95POST 
    10796$m<postop> || $m<dotty> 
    10897 
     
    114103my $name = "prefix:"~$op; 
    115104if $op.re_matchp('\A\w+\z') { $name = $op } 
    116 Apply.newp($name,Capture.newp1([$blackboard::expect_term_base])) 
     105if $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} 
    117115 
    118116postfix 
     
    123121my $name = $m<sym_name>; 
    124122my $ident = "postcircumfix:"~$name; 
    125 my $args = $m<semilist>; 
     123my $args = $m<semilist> || $m<nibble>; 
    126124if $args && ($args.WHAT ne 'Array')  { $args = [$args] } 
    127125Call.newp($blackboard::expect_term_base,$ident,Capture.newp1($args||[])) 
     
    132130if $args && ($args.WHAT ne 'Array')  { $args = [$args] } 
    133131Apply.newp("circumfix:"~$op,Capture.newp1($args||[])) 
     132 
     133infix 
     134my $op = $m<sym_name>; 
     135$op; 
    134136 
    135137semilist 
     
    159161$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> 
    160162 
     163infixish 
     164$m<colonpair> || $m<infix> || $m<infix_prefix_meta_operator> || $m<infix_circumfix_meta_operator> || $m<infix> 
    161165 
    162166desigilname 
     
    188192 
    189193integer 
     194NumInt.newp(*text*,10) 
     195 
     196dec_number 
    190197NumInt.newp(*text*,10) 
    191198 
     
    348355Cond.newp([[$if_expr,$if_block]].push($elsif.flatten),$els,undef) 
    349356 
    350 elsif 
     357statement_control__S_036if_elsif 
    351358[$m<xblock><EXPR>,$m<xblock><pblock>] 
    352359 
     
    494501else { die "capture AST form not recognized" } 
    495502 
     503nibbler 
     504#XXX I've sooo no idea. 
     505$m<nibbles>[0] 
     506 
    496507colonpair 
    497 *1* 
     508my $v = $m<v>; 
     509if $o<v><nibble> { #XXX :x<2> bypass postcircumfix:< >. 
     510  $v = $o<v><nibble><nibbles>[0]; 
     511  $v = Buf.newp($v) 
     512} 
     513my $k = $m<k>; # or $m<identifier> ? 
     514Pair.newp($k,$v) 
    498515 
    499516colonpair__false 
  • misc/elfish/STD_blue/Makefile

    r22593 r22964  
    11 
    2 elfx:: 
     2ELF=../../elf/elf_h 
     3ELFDIR=../../elf/elf_h_src 
     4TMP=deleteme 
     5 
     6elfx:: have_parser_cache 
    37        ./IRx1_FromAST2_create.pl 
    48        ../../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 
     11check: 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 
     30have_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  
    9292    #use YAML::XS; 
    9393    #print Dump($r); 
    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}); 
     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}); 
    9898  }  
    9999  elsif($format eq 'p5a') { 
     100    $main::whole_file = $code; 
     101    $main::whole_file .= " "; # -e '3' dump includes _pos's of 2 
    100102    print out($cache_file,$r->to_dump0); 
    101103  } 
     
    141143    else { die "bogus sym: $sym\n" } 
    142144  } 
    143   our $category = 'comp_unit'; 
    144145  our %seen; 
    145146  our $max_repetition = 20; 
     
    148149    local $seen{$o} = $seen{$o}; 
    149150    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 
    152158    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    } 
    153164    if($sym) { 
    154165      my $normalized = $o->condition_sym($sym); 
    155166      $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'); 
    157170    } 
    158171    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); 
    163172    my $s = $str->to_dump0; 
    164173    my $h = join("",map{ 
     
    167176      else { 
    168177        my $v = $o->{$_}; 
    169         local $category = $_; 
    170178        my $vs = defined($v) ? $v->to_dump0 : 'undef'; 
    171179        "\n $_ => $vs,"