Changeset 5336:fe802c9b09e9 in livinglogic.python.xist for src/ll/UL4.g

Show
Ignore:
Timestamp:
02/11/13 13:46:43 (7 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Merge AST and Tag again.

Expressions are now allowed as the content of <?code tag?>, so they may sit at
the top level in tags.

Have the location object point back to the root template. With this we don't
have to pass along the keepws flag in eval().

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/ll/UL4.g

    r5331 r5336  
    141141 
    142142none returns [node] 
    143     : NONE { $node = ul4c.Const(None) } 
     143    : NONE { $node = ul4c.Const(self.location, None) } 
    144144    ; 
    145145 
    146146true_ returns [node] 
    147     : TRUE { $node = ul4c.Const(True) } 
     147    : TRUE { $node = ul4c.Const(self.location, True) } 
    148148    ; 
    149149 
    150150false_ returns [node] 
    151     : FALSE { $node = ul4c.Const(False) } 
     151    : FALSE { $node = ul4c.Const(self.location, False) } 
    152152    ; 
    153153 
    154154int_ returns [node] 
    155     : INT { $node = ul4c.Const(int($INT.text, 0)) } 
     155    : INT { $node = ul4c.Const(self.location, int($INT.text, 0)) } 
    156156    ; 
    157157 
    158158float_ returns [node] 
    159     : FLOAT { $node = ul4c.Const(float($FLOAT.text)) } 
     159    : FLOAT { $node = ul4c.Const(self.location, float($FLOAT.text)) } 
    160160    ; 
    161161 
    162162string returns [node] 
    163     : STRING { $node = ul4c.Const(ast.literal_eval($STRING.text)) } 
     163    : STRING { $node = ul4c.Const(self.location, ast.literal_eval($STRING.text)) } 
    164164    ; 
    165165 
    166166date returns [node] 
    167     : DATE { $node = ul4c.Const(datetime.datetime(*map(int, [f for f in ul4c.datesplitter.split($DATE.text[2:-1]) if f]))) } 
     167    : DATE { $node = ul4c.Const(self.location, datetime.datetime(*map(int, [f for f in ul4c.datesplitter.split($DATE.text[2:-1]) if f]))) } 
    168168    ; 
    169169 
    170170color returns [node] 
    171     : COLOR { $node = ul4c.Const(color.Color.fromrepr($COLOR.text)) } 
     171    : COLOR { $node = ul4c.Const(self.location, color.Color.fromrepr($COLOR.text)) } 
    172172    ; 
    173173 
    174174name returns [node] 
    175     : NAME { $node = ul4c.Var($NAME.text) } 
     175    : NAME { $node = ul4c.Var(self.location, $NAME.text) } 
    176176    ; 
    177177 
     
    192192    : 
    193193        '[' 
    194         ']' { $node = ul4c.List() } 
     194        ']' { $node = ul4c.List(self.location) } 
    195195    | 
    196         '[' {$node = ul4c.List() } 
     196        '[' {$node = ul4c.List(self.location) } 
    197197        e1=expr1 { $node.items.append($e1.node) } 
    198198        ( 
     
    220220            condition=expr1 { _condition = $condition.node; } 
    221221        )? 
    222         ']' { $node = ul4c.ListComp($item.node, $n.varname, $container.node, _condition) } 
     222        ']' { $node = ul4c.ListComp(self.location, $item.node, $n.varname, $container.node, _condition) } 
    223223    ; 
    224224 
     
    235235    : 
    236236        '{' 
    237         '}' { $node = ul4c.Dict() } 
     237        '}' { $node = ul4c.Dict(self.location) } 
    238238    | 
    239         '{' { $node = ul4c.Dict() } 
     239        '{' { $node = ul4c.Dict(self.location) } 
    240240        i1=dictitem { $node.items.append($i1.node) } 
    241241        ( 
     
    265265            condition=expr1 { _condition = $condition.node; } 
    266266        )? 
    267         '}' { $node = ul4c.DictComp($key.node, $value.node, $n.varname, $container.node, _condition) } 
     267        '}' { $node = ul4c.DictComp(self.location, $key.node, $value.node, $n.varname, $container.node, _condition) } 
    268268    ; 
    269269 
     
    282282            'if' 
    283283            condition=expr1 { _condition = $condition.node; } 
    284         )? { $node = ul4c.GenExpr($item.node, $n.varname, $container.node, _condition) } 
     284        )? { $node = ul4c.GenExpr(self.location, $item.node, $n.varname, $container.node, _condition) } 
    285285    ; 
    286286 
     
    328328            /* Attribute access */ 
    329329            '.' 
    330             n=name { $node = ul4c.GetAttr($node, $n.text) } 
     330            n=name { $node = ul4c.GetAttr(self.location, $node, $n.text) } 
    331331        | 
    332332            /* Function/method call */ 
    333             '(' { $node = ul4c.CallMeth($node.obj, $node.attrname) if isinstance($node, ul4c.GetAttr) else ul4c.CallFunc($node) } 
     333            '(' { $node = ul4c.CallMeth(self.location, $node.obj, $node.attrname) if isinstance($node, ul4c.GetAttr) else ul4c.CallFunc(self.location, $node) } 
    334334            ( 
    335335                /* No arguments */ 
     
    391391                ( 
    392392                    e2=expr1 { index2 = $e2.node; } 
    393                 )? { $node = ul4c.GetSlice($node, None, index2) } 
     393                )? { $node = ul4c.GetSlice(self.location, $node, None, index2) } 
    394394            | 
    395395                e2=expr1 { index1 = $e2.node; } 
     
    399399                        e3=expr1 { index2 = $e3.node; } 
    400400                    )? 
    401                 )? { $node = ul4c.GetSlice($node, index1, index2) if slice else ul4c.GetItem($node, index1) } 
     401                )? { $node = ul4c.GetSlice(self.location, $node, index1, index2) if slice else ul4c.GetItem(self.location, $node, index1) } 
    402402            ) 
    403403            ']' 
     
    418418            $node = $e.node; 
    419419            for i in range(count): 
    420                 $node = ul4c.Neg.make($node); 
     420                $node = ul4c.Neg.make(self.location, $node); 
    421421        } 
    422422    ; 
     
    436436                '%' { cls = ul4c.Mod; } 
    437437            ) 
    438             e2=expr8 { $node = cls.make($node, $e2.node) } 
     438            e2=expr8 { $node = cls.make(self.location, $node, $e2.node) } 
    439439        )* 
    440440    ; 
     
    450450                '-' { cls = ul4c.Sub; } 
    451451            ) 
    452             e2=expr7 { $node = cls.make($node, $e2.node) } 
     452            e2=expr7 { $node = cls.make(self.location, $node, $e2.node) } 
    453453        )* 
    454454    ; 
     
    472472                '>=' { cls = ul4c.GE; } 
    473473            ) 
    474             e2=expr6 { $node = cls.make($node, $e2.node) } 
     474            e2=expr6 { $node = cls.make(self.location, $node, $e2.node) } 
    475475        )* 
    476476    ; 
     
    486486            )? 
    487487            'in' 
    488             e2=expr5 { $node = cls.make($node, $e2.node) } 
     488            e2=expr5 { $node = cls.make(self.location, $node, $e2.node) } 
    489489        )? 
    490490    ; 
     
    494494    : 
    495495        'not' 
    496         e=expr4 { $node = ul4c.Not.make($e.node) } 
     496        e=expr4 { $node = ul4c.Not.make(self.location, $e.node) } 
    497497    | 
    498498        e=expr4 { $node = $e.node; } 
     
    506506        ( 
    507507            'and' 
    508             e2=expr3 { $node = ul4c.And($node, $e2.node) } 
     508            e2=expr3 { $node = ul4c.And(self.location, $node, $e2.node) } 
    509509        )* 
    510510    ; 
     
    516516        ( 
    517517            'or' 
    518             e2=expr2 { $node = ul4c.Or($node, $e2.node) } 
     518            e2=expr2 { $node = ul4c.Or(self.location, $node, $e2.node) } 
    519519        )* 
    520520    ;