Changeset 686:9c00a7e3b94e in livinglogic.java.ul4 for src/main/antlr3/com/livinglogic/ul4/UL4.g

Show
Ignore:
Timestamp:
09/28/12 16:42:18 (7 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Variable unpacking in for loops can now be nested arbitrarily deep.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/main/antlr3/com/livinglogic/ul4/UL4.g

    r569 r686  
    487487/* Additional rules for "for" tag */ 
    488488 
     489nestedvarname returns [Object varname] 
     490    : 
     491        n=name { $varname = $n.text; } 
     492    | 
     493        '(' n0=nestedvarname ',' ')' { $varname = java.util.Arrays.asList($n0.varname); } 
     494    | 
     495        '(' 
     496        n1=nestedvarname 
     497        ',' 
     498        n2=nestedvarname { $varname = new ArrayList(2); ((ArrayList)$varname).add($n1.varname); ((ArrayList)$varname).add($n2.varname); } 
     499        ( 
     500            ',' 
     501            n3=nestedvarname { ((ArrayList)$varname).add($n3.varname); } 
     502        )* 
     503        ','? 
     504        ')'  
     505    ; 
     506 
    489507for_ returns [For node] 
    490508    : 
    491         n=name 
     509        n=nestedvarname 
    492510        'in' 
    493         e=expr1 { $node = new ForNormal(location, $e.node, $n.text); } 
    494         EOF 
    495     | 
    496         '(' 
    497         n1=name 
    498         ',' 
    499         ')' 
    500         'in' 
    501         e=expr1 { $node = new ForUnpack(location, $e.node); ((ForUnpack)$node).appendName($n1.text); } 
    502         EOF 
    503     | 
    504         '(' { $node = new ForUnpack(location); } 
    505         n1=name { ((ForUnpack)$node).appendName($n1.text); } 
    506         ( 
    507             ',' 
    508             n2=name { ((ForUnpack)$node).appendName($n2.text); } 
    509         )+ 
    510         ','? 
    511         ')' 
    512         'in' 
    513         e=expr1 { $node.setContainer($e.node); } 
     511        e=expr1 { $node = new For(location, $n.varname, $e.node); } 
    514512        EOF 
    515513    ;