Changeset 124:632aa9c126f0 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/05/08 13:31:27 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Implement list and dict constants. Fix one for rule.

Location:
library/src/com/livinglogic/ul4
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • library/src/com/livinglogic/ul4/AST.java

    r116 r124  
    2222    } 
    2323 
     24    public void setEnd(int end) 
     25    { 
     26        this.end = end; 
     27    } 
     28 
    2429    abstract public int compile(Template template, Registers registers, Location location); 
    2530} 
  • library/src/com/livinglogic/ul4/Main.java

    r123 r124  
    1313    public static void main(String[] args) 
    1414    { 
    15         Template tmpl = Compiler.compile("<?print now().format('%Y-%b-%d %H:%M:%S.%f')?>"); 
     15        Template tmpl = Compiler.compile("<?for (key, value) in {'eins': 1, 'zwei': 2, 'drei': 3,}.items()?><?print key?> (<?print value?>)\n<?end for?>"); 
    1616        long start = new Date().getTime(); 
    1717        String output = tmpl.renders("<gu&rk> & 'foo'"); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r123 r124  
    1111    public static final int OC_LOADSTR = 6; 
    1212    public static final int OC_LOADDATE = 7; 
    13     public static final int OC_LOADVAR = 8; 
    14     public static final int OC_STOREVAR = 9; 
    15     public static final int OC_ADDVAR = 10; 
    16     public static final int OC_SUBVAR = 11; 
    17     public static final int OC_MULVAR = 12; 
    18     public static final int OC_TRUEDIVVAR = 13; 
    19     public static final int OC_FLOORDIVVAR = 14; 
    20     public static final int OC_MODVAR = 15; 
    21     public static final int OC_DELVAR = 16; 
    22     public static final int OC_GETATTR = 17; 
    23     public static final int OC_GETITEM = 18; 
    24     public static final int OC_GETSLICE12 = 19; 
    25     public static final int OC_GETSLICE1 = 20; 
    26     public static final int OC_GETSLICE2 = 21; 
    27     public static final int OC_GETSLICE = 22; 
    28     public static final int OC_PRINT = 23; 
    29     public static final int OC_FOR = 24; 
    30     public static final int OC_ENDFOR = 25; 
    31     public static final int OC_NOT = 26; 
    32     public static final int OC_NEG = 27; 
    33     public static final int OC_CONTAINS = 28; 
    34     public static final int OC_NOTCONTAINS = 29; 
    35     public static final int OC_EQUALS = 30; 
    36     public static final int OC_NOTEQUALS = 31; 
    37     public static final int OC_ADD = 32; 
    38     public static final int OC_SUB = 33; 
    39     public static final int OC_MUL = 34; 
    40     public static final int OC_FLOORDIV = 35; 
    41     public static final int OC_TRUEDIV = 36; 
    42     public static final int OC_AND = 37; 
    43     public static final int OC_OR = 38; 
    44     public static final int OC_MOD = 39; 
    45     public static final int OC_CALLFUNC0 = 40; 
    46     public static final int OC_CALLFUNC1 = 41; 
    47     public static final int OC_CALLFUNC2 = 42; 
    48     public static final int OC_CALLFUNC3 = 43; 
    49     public static final int OC_CALLMETH0 = 44; 
    50     public static final int OC_CALLMETH1 = 45; 
    51     public static final int OC_CALLMETH2 = 46; 
    52     public static final int OC_CALLMETH3 = 47; 
    53     public static final int OC_IF = 48; 
    54     public static final int OC_ELSE = 49; 
    55     public static final int OC_ENDIF = 50; 
    56     public static final int OC_RENDER = 51; 
     13    public static final int OC_BUILDLIST = 8; 
     14    public static final int OC_BUILDDICT = 9; 
     15    public static final int OC_ADDLIST = 10; 
     16    public static final int OC_ADDDICT = 11; 
     17    public static final int OC_LOADVAR = 12; 
     18    public static final int OC_STOREVAR = 13; 
     19    public static final int OC_ADDVAR = 14; 
     20    public static final int OC_SUBVAR = 15; 
     21    public static final int OC_MULVAR = 16; 
     22    public static final int OC_TRUEDIVVAR = 17; 
     23    public static final int OC_FLOORDIVVAR = 18; 
     24    public static final int OC_MODVAR = 19; 
     25    public static final int OC_DELVAR = 20; 
     26    public static final int OC_GETATTR = 21; 
     27    public static final int OC_GETITEM = 22; 
     28    public static final int OC_GETSLICE12 = 23; 
     29    public static final int OC_GETSLICE1 = 24; 
     30    public static final int OC_GETSLICE2 = 25; 
     31    public static final int OC_GETSLICE = 26; 
     32    public static final int OC_PRINT = 27; 
     33    public static final int OC_FOR = 28; 
     34    public static final int OC_ENDFOR = 29; 
     35    public static final int OC_NOT = 30; 
     36    public static final int OC_NEG = 31; 
     37    public static final int OC_CONTAINS = 32; 
     38    public static final int OC_NOTCONTAINS = 33; 
     39    public static final int OC_EQUALS = 34; 
     40    public static final int OC_NOTEQUALS = 35; 
     41    public static final int OC_ADD = 36; 
     42    public static final int OC_SUB = 37; 
     43    public static final int OC_MUL = 38; 
     44    public static final int OC_FLOORDIV = 39; 
     45    public static final int OC_TRUEDIV = 40; 
     46    public static final int OC_AND = 41; 
     47    public static final int OC_OR = 42; 
     48    public static final int OC_MOD = 43; 
     49    public static final int OC_CALLFUNC0 = 44; 
     50    public static final int OC_CALLFUNC1 = 45; 
     51    public static final int OC_CALLFUNC2 = 46; 
     52    public static final int OC_CALLFUNC3 = 47; 
     53    public static final int OC_CALLMETH0 = 48; 
     54    public static final int OC_CALLMETH1 = 49; 
     55    public static final int OC_CALLMETH2 = 50; 
     56    public static final int OC_CALLMETH3 = 51; 
     57    public static final int OC_IF = 52; 
     58    public static final int OC_ELSE = 53; 
     59    public static final int OC_ENDIF = 54; 
     60    public static final int OC_RENDER = 55; 
    5761 
    5862    public static final int CF0_NOW = 0; 
     
    132136        else if (name.equals("loaddate")) 
    133137            return OC_LOADDATE; 
     138        else if (name.equals("buildlist")) 
     139            return OC_BUILDLIST; 
     140        else if (name.equals("builddict")) 
     141            return OC_BUILDDICT; 
     142        else if (name.equals("addlist")) 
     143            return OC_ADDLIST; 
     144        else if (name.equals("adddict")) 
     145            return OC_ADDDICT; 
    134146        else if (name.equals("loadvar")) 
    135147            return OC_LOADVAR; 
     
    372384        else if (code == OC_LOADDATE) 
    373385            return "loaddate"; 
     386        else if (code == OC_BUILDLIST) 
     387            return "buildlist"; 
     388        else if (code == OC_BUILDDICT) 
     389            return "builddict"; 
     390        else if (code == OC_ADDLIST) 
     391            return "addlist"; 
     392        else if (code == OC_ADDDICT) 
     393            return "adddict"; 
    374394        else if (code == OC_LOADVAR) 
    375395            return "loadvar"; 
  • library/src/com/livinglogic/ul4/Template.java

    r123 r124  
    1414import java.util.Map; 
    1515import java.util.Date; 
     16import java.util.ArrayList; 
    1617import java.util.regex.Pattern; 
    1718import java.util.regex.Matcher; 
     
    3637    { 
    3738        // Initializes regular expressions 
    38         tokenPattern = Pattern.compile("\\(|\\)|\\[|\\]|\\.|,|==|\\!=|=|\\+=|\\-=|\\*=|/=|//=|%=|%|:|\\+|-|\\*|//|/"); 
     39        tokenPattern = Pattern.compile("\\(|\\)|\\[|\\]|\\{|\\}|\\.|,|==|\\!=|=|\\+=|\\-=|\\*=|/=|//=|%=|%|:|\\+|-|\\*|//|/"); 
    3940        namePattern = Pattern.compile("[a-zA-Z_][\\w]*"); 
    4041        // We don't have negatve numbers, this is handled by constant folding in the AST for unary minus 
     
    566567                            reg[code.r1] = Utils.isoDateFormatter.parse(code.arg); 
    567568                            break; 
     569                        case Opcode.OC_BUILDLIST: 
     570                            reg[code.r1] = new ArrayList(); 
     571                            break; 
     572                        case Opcode.OC_BUILDDICT: 
     573                            reg[code.r1] = new HashMap(); 
     574                            break; 
     575                        case Opcode.OC_ADDLIST: 
     576                            ((List)reg[code.r1]).add(reg[code.r2]); 
     577                            break; 
     578                        case Opcode.OC_ADDDICT: 
     579                            ((Map)reg[code.r1]).put(reg[code.r2], reg[code.r3]); 
     580                            break; 
    568581                        case Opcode.OC_LOADVAR: 
    569582                            reg[code.r1] = variables.get(code.arg); 
  • library/src/com/livinglogic/ul4/ul4c.py

    r123 r124  
    160160    ] 
    161161 
     162    def expr_emptylist(self, (_0, _1)): 
     163        return ul4.List(_0.start, _1.end) 
     164    expr_emptylist.spark = ['expr11 ::= [ ]'] 
     165 
     166    def expr_buildlist(self, (_0, expr)): 
     167        list = ul4.List(_0.start, expr.end) 
     168        list.append(expr) 
     169        return list 
     170    expr_buildlist.spark = ['buildlist ::= [ expr0'] 
     171 
     172    def expr_addlist(self, (list, _0, expr)): 
     173        list.append(expr) 
     174        list.end = expr.end 
     175        return list 
     176    expr_addlist.spark = ['buildlist ::= buildlist , expr0'] 
     177 
     178    def expr_finishlist(self, (list, _0)): 
     179        list.end = _0.end 
     180        return list 
     181    expr_finishlist.spark = ['expr11 ::= buildlist ]'] 
     182 
     183    def expr_finishlist1(self, (list, _0, _1)): 
     184        list.end = _1.end 
     185        return list 
     186    expr_finishlist1.spark = ['expr11 ::= buildlist , ]'] 
     187 
     188    def expr_emptydict(self, (_0, _1)): 
     189        return ul4.Dict(_0.start, _1.end) 
     190    expr_emptydict.spark = ['expr11 ::= { }'] 
     191 
     192    def expr_builddict(self, (_0, key, _1, value)): 
     193        dict = ul4.Dict(_0.start, value.end) 
     194        dict.append(key, value) 
     195        return dict 
     196    expr_builddict.spark = ['builddict ::= { expr0 : expr0'] 
     197 
     198    def expr_adddict(self, (dict, _0, key, _1, value)): 
     199        dict.append(key, value) 
     200        dict.end = value.end 
     201        return dict 
     202    expr_adddict.spark = ['builddict ::= builddict , expr0 : expr0'] 
     203 
     204    def expr_finishdict(self, (dict, _0)): 
     205        dict.end = _0.end 
     206        return dict 
     207    expr_finishdict.spark = ['expr11 ::= builddict }'] 
     208 
     209    def expr_finishdict1(self, (dict, _0, _1)): 
     210        dict.end = _1.end 
     211        return dict 
     212    expr_finishdict1.spark = ['expr11 ::= builddict , }'] 
     213 
    162214    def expr_bracket(self, (_0, expr, _1)): 
    163215        return expr 
     
    352404    def for2b(self, (_0, iter1, _1, iter2, _2, _3, _4, cont)): 
    353405        return ul4.For2(_0.start, cont.end, iter1, iter2, cont) 
    354     for2a.spark = ['for ::= ( name , name , ) in expr0'] 
     406    for2b.spark = ['for ::= ( name , name , ) in expr0'] 
    355407 
    356408