Changeset 22595 for misc

Show
Ignore:
Timestamp:
10/13/08 16:31:54 (3 months ago)
Author:
putter
Message:

[elfish/STD_blue] Continuing to adapt constructors.

Location:
misc/elfish/STD_blue
Files:
2 modified

Legend:

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

    r22593 r22595  
    1313statement 
    1414my $labels = $m<label>; 
    15 my $result = $m<EXPR> || $m<control>; 
    16 if $o<EXPR> && ($o<mod_loop> || $o<mod_cond>) { 
     15my $result = $m<EXPR> || $m<statement_control>; 
     16if $o<EXPR> && ($o<statement_mod_loop>.elems || $o<statement_mod_cond>.elems) { 
    1717  temp $blackboard::statement_expr = $result; 
    18   $result = $m<mod_loop> || $m<mod_cond>; 
    19   if $o<mod_condloop> { 
     18  $result = $m<statement_mod_loop>[0] || $m<statement_mod_cond>[0]; 
     19  if $o<mod_condloop> { #XXX still exists? 
    2020    $blackboard::statement_expr = $result; 
    2121    $result = $m<mod_condloop>; 
     
    2929 
    3030EXPR 
    31 if $m<infix> { 
     31if $o<termish> { 
     32  $m<termish>[0] 
     33} 
     34elsif $o<infix> { 
    3235  my $op = $m<infix><sym_name>; 
    3336  my $args = [$m<left>,$m<right>]; 
     
    3942  } 
    4043} 
     44elsif $o<chain> { 
     45  my $op = $o<chain>[1]<sym_name>; 
     46  my $args = [$m<chain>[0],$m<chain>[2]]; 
     47  Apply.newp("infix:"~$op,Capture.newp1($args)) 
     48} 
     49elsif $o<list> { 
     50  my $op = $o<delims>[0]<sym_name>; 
     51  my $args = $m<list>; 
     52  Apply.newp("infix:"~$op,Capture.newp1($args)) 
     53} 
    4154else { 
    4255  temp $blackboard::expect_term_base = $m<noun>; 
     
    99112$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> 
    100113 
     114 
     115desigilname 
     116$m<longname> 
     117 
     118deflongname 
     119$m<name> 
     120 
    101121longname 
    102122$m<name> 
     
    130150my $args = $m<args><semilist>; 
    131151if not($args) && $o<args><arglist>[0]<EXPR> { 
    132   $args = [ irbuild_ir($o<args><arglist>[0]<EXPR>) ]; 
     152  $args = [ ir($o<args><arglist>[0]<EXPR>) ]; 
    133153} 
    134154Apply.newp($m<identifier>,Capture.newp1($args||[])) 
     
    159179my $nibs = $m<nibble><nibbles>; 
    160180my $args = $nibs.map(sub($x){if $x.WHAT eq 'Str' {Buf.newp($x);} else {$x}}); 
    161 Apply.newp('infix:~',Capture.newp1($args||[])) 
     181if $args.elems < 2 { $args.push(Buf.newp("")) } 
     182my $tmp = $args.shift; 
     183for $args { 
     184  $tmp = Apply.newp('infix:~',Capture.newp1([$tmp,$_])) 
     185} 
     186$tmp; 
    162187 
    163188nibbles:\ 
    164189my $which = $m<item><sym_name>; 
    165190if $which eq 'n' { "\n" } 
    166 if $which eq 't' { "\t" } 
     191elsif $which eq 't' { "\t" } 
    167192else { $which } 
     193 
     194nibbles 
     195$m<variable> 
    168196 
    169197 
     
    198226 
    199227variable 
    200 my $tw = $m<twigil>; 
    201 if $o<postcircumfix> { 
     228my $tw = $m<twigil>[0]; 
     229if $o<postcircumfix>.elems { 
    202230  if $tw eq "." { 
    203231    my $slf = Apply.newp('self',Capture.newp1([])); 
     
    231259 
    232260statement_control:for 
    233 For.newp($m<EXPR>,$m<xblock>) 
     261For.newp($m<xblock><EXPR>,$m<xblock>) 
    234262 
    235263statement_mod_loop:for 
     
    259287 
    260288statement_control:if 
     289my $if_expr = $m<xblock><EXPR>; 
     290my $if_block = $m<xblock><pblock>; 
    261291my $els = $m<else>; 
    262292if $els { $els = $els[0] } 
    263 Cond.newp([[$m<if_expr>,$m<if_block>]].push($m<elsif>.flatten),$els,undef) 
     293Cond.newp([[$if_expr,$if_block]].push($m<elsif>.flatten),$els,undef) 
    264294 
    265295elsif 
     
    315345 
    316346pblock 
    317 if $o<signature> { 
    318   SubDecl.newp(undef,undef,undef,undef,$m<signature>,undef,$m<block>) 
     347if $o<signature>.elems { 
     348  SubDecl.newp(undef,undef,undef,undef,$m<signature>[0],undef,$m<block>) 
    319349} else { 
    320350  $m<block> 
     
    327357$m<pblock> 
    328358 
    329 plurality_declarator:multi 
     359multi_declarator:multi 
    330360temp $blackboard::plurality = 'multi'; 
    331 $m<pluralized> || $m<routine_def> 
    332  
    333 routine_declarator:routine_def 
    334 my $scope = $blackboard::scope; temp $blackboard::scope; 
     361$m<declarator> 
     362 
     363routine_declarator:sub 
     364$m<routine_def> 
     365 
     366routine_declarator:method 
     367$m<method_def> 
     368 
     369method_def 
    335370my $plurality = $blackboard::plurality; temp $blackboard::plurality; 
    336 my $ident = ""; 
    337 if $o<ident> { $ident = $m<ident>  }; 
    338 if ($o<ident> && not($scope)) { $scope = "our" }; 
    339 my $sig = Signature.newp([],undef); 
    340 if $m<multisig> { $sig = $m<multisig>.[0] }; 
    341 SubDecl.newp($scope,undef,$plurality,$ident,$sig,$m<trait>,$m<block>) 
    342  
    343 # routine_def is the same as routine_declarator:routine_def 
    344 # This is a workaround for STD.pm not recognizing  multi f(){} . 
     371my $multisig = $m<multisig>; 
     372if not($multisig) { $multisig = [Signature.newp([],undef)]; } 
     373MethodDecl.newp(undef,undef,$plurality,$m<longname>,$multisig.[0],maybe($m<trait>),$m<block>,undef,undef) 
     374 
    345375routine_def 
    346376my $scope = $blackboard::scope; temp $blackboard::scope; 
    347377my $plurality = $blackboard::plurality; temp $blackboard::plurality; 
    348378my $ident = ""; 
    349 if $o<ident> { $ident = $m<ident>  }; 
    350 if ($o<ident> && not($scope)) { $scope = "our" }; 
     379if $o<deflongname>.elems { $ident = $m<deflongname>[0]  }; 
     380if ($ident && not($scope)) { $scope = "our" }; 
    351381my $sig = Signature.newp([],undef); 
    352 if $m<multisig> { $sig = $m<multisig>.[0] }; 
    353 SubDecl.newp($scope,undef,$plurality,$ident,$sig,$m<trait>,$m<block>) 
    354  
    355 routine_declarator:method_def 
    356 my $plurality = $blackboard::plurality; temp $blackboard::plurality; 
    357 my $multisig = $m<multisig>; 
    358 if not($multisig) { $multisig = [Signature.newp([],undef)]; } 
    359 MethodDecl.newp(undef,undef,$plurality,$m<ident>,$multisig.[0],$m<trait>,$m<block>,undef,undef) 
     382if $o<multisig> { $sig = $m<multisig>.[0] }; 
     383SubDecl.newp($scope,undef,$plurality,$ident,$sig,maybe($m<trait>),$m<block>) 
     384 
     385multisig 
     386$m<signature>[0] 
    360387 
    361388signature 
    362 Signature.newp($m<parsep>,undef) 
     389Signature.newp($m<parameter>,undef) 
    363390 
    364391parameter 
    365 Parameter.newp($m<type_constraint>,$m<quantchar>,$m<param_var>,undef,undef,undef,undef) 
     392my $var = $m<param_var>; 
     393my $quantchar; 
     394if $o<slurp> { 
     395  $var = $m<slurp><param_var>; 
     396  $quantchar = '*'; 
     397} 
     398my $type_constraint = $m<type_constraint>; 
     399#X gimme5 is emitting two copies of the constraint. 
     400if $type_constraint && $type_constraint.elems == 2 { $type_constraint.pop } 
     401Parameter.newp($type_constraint,$quantchar,$var,undef,undef,undef,undef) 
    366402 
    367403param_var 
    368 ParamVar.newp($m<sigil>,$m<twigil>,$m<ident>) 
     404ParamVar.newp($m<sigil>,$m<twigil>[0],$m<identifier>[0]) 
     405 
     406type_constraint 
     407$m<fulltypename> 
     408 
     409fulltypename 
     410$m<typename>[0] 
     411 
     412typename 
     413$m<longname> 
     414 
    369415 
    370416capture 
     
    450496 
    451497package_def 
    452 PackageDecl.newp(undef,undef,$blackboard::package_declarator,$m<module_name>.[0],$m<traits>,$m<block>) 
    453  
    454 fulltypename 
    455 $m<typename>.join("::") 
    456  
    457 typename 
    458 *text* # $m<name> 
    459  
    460 trait_verb:is 
    461 Trait.newp('is',$m<ident>) 
    462  
    463 trait_verb:does 
    464 Trait.newp('does',$m<role_name>) 
     498PackageDecl.newp(undef,undef,$blackboard::package_declarator,$m<module_name>.[0],maybe($m<trait>),$m<block>) 
     499 
     500trait 
     501$m<trait_auxiliary> 
     502 
     503trait_auxiliary:is 
     504Trait.newp('is',$m<longname>) 
     505 
     506trait_auxiliary:does 
     507Trait.newp('does',$m<module_name>) 
    465508 
    466509 
     
    632675        $x.make_ir_from_Match_tree() 
    633676      }; 
     677      sub maybe ($x) { 
     678        if $x.WHAT eq "Array" && $x.elems == 0 { undef } 
     679        else { $x } 
     680      } 
    634681 
    635682  END 
  • misc/elfish/STD_blue/STD_blue_run

    r22593 r22595  
    149149    if($seen{$o}++ > $max_repetition) { return "LOOP:$o"->to_dump0 } 
    150150    my $rule = $category; 
    151     if($rule =~ /\A(chain|list|arg|left|right)\z/) { $rule = 'EXPR' } 
     151    if($rule =~ /\A(chain|list|arg|left|right|termish)\z/) { $rule = 'EXPR' } 
    152152    my $sym = $o->{sym}; 
    153153    if($sym) { 
     
    168168        my $v = $o->{$_}; 
    169169        local $category = $_; 
    170         my $vs = $v->to_dump0; 
     170        my $vs = defined($v) ? $v->to_dump0 : 'undef'; 
    171171        "\n $_ => $vs," 
    172172      } 
     
    190190  sub to_dump0 { 
    191191    my($o)=@_; 
    192     $o =~ s/([\\'\$\@\%])/\\$1/g; 
     192    $o =~ s/([\\'])/\\$1/g; 
    193193    "'".$o."'"; 
    194194  }