Changeset 26880 in project


Ignore:
Timestamp:
06/12/12 09:54:58 (9 years ago)
Author:
Ivan Raikov
Message:

ersatz: more fixes aimed at passing the "cheatsheet" template example

Location:
release/4/ersatz/trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • release/4/ersatz/trunk/ersatz-lib.scm

    r26879 r26880  
    374374    (trim       . ,(func-arg1 op-trim))
    375375    (urlize     . ,(func-arg1 op-urlize))
     376    (wordcount  . ,(func-arg1 op-wordcount))
    376377   
    377378    (attr    . ,(func-arg2 op-attr))
  • release/4/ersatz/trunk/ersatz.grm

    r26879 r26880  
    3333   ;; --- token definitions
    3434
    35    (IF ELSE ELSEIF ENDIF FOR ENDFOR SET EXTENDS INCLUDE MACRO
     35   (IF ELSE ELSEIF ENDIF FOR ENDFOR SET EXTENDS INCLUDE MACRO IDENT
    3636    ENDMACRO BLOCK ENDBLOCK FILTER ENDFILTER CALL ENDCALL IMPORT FROM
    3737    WITH ENDWITH WITHOUT CONTEXT AUTOESCAPE ENDAUTOESCAPE EOF INT FLOAT
    38     STRING TEXT IDENT EXPAND ENDEXPAND TRUE FALSE NULL
    39     LBRACE RBRACE IS
     38    STRING TEXT EXPAND ENDEXPAND TRUE FALSE NULL
     39    COLON RBRACE RBRACKET RPAREN
    4040
    41     (left:  OR AND LT GT EQEQ NEQ PLUS MINUS TIMES DIV MOD VLINE AS IN DOT)
    42     (right: POWER LPAREN LBRACKET)
     41    (left:  OR AND LT GT EQEQ NEQ PLUS MINUS TIMES DIV MOD VLINE DOT COMMA)
     42    (right: POWER LBRACE LBRACKET LPAREN IN IS AS)
    4343    (nonassoc: EQ NOT UMINUS)
    44     (left: COMMA COLON RPAREN RBRACKET)
    4544    )
    4645
     
    7675    (IF if-chain else-part ENDIF) : (IfStatement $2 $3)
    7776    (error ENDIF)
    78 ;;    (FOR ident-list IN expr stmts ENDFOR) : (ForStatement (SetExpr $2) $4 $5)
    79     (FOR expr IN expr stmts ENDFOR)       : (ForStatement $2 $4 $5)
     77    (FOR ident-list IN expr stmts ENDFOR) : (ForStatement (SetExpr $2) $4 $5)
     78    (FOR ident IN expr stmts ENDFOR)       : (ForStatement $2 $4 $5)
    8079    (error ENDFOR)
    8180    (WITH expr-list stmts ENDWITH) : (WithStatement $2 $3)
     
    109108    )
    110109
    111    (ident
    112     (IDENT) : (IdentExpr $1)
    113     )
    114110
    115    (ident-list
    116     (ident) : (list $1)
    117     (ident COMMA ident-list) : (cons $1 $3)
    118     )
    119 
    120    (expr-list
    121     () : (list)
    122     (expr) : (list $1)
    123     (expr COMMA expr-list) : (cons $1 $3)
    124     )
    125111   
    126112   (expr
    127     (ident)                         : $1
    128     (INT)                           : (LiteralExpr (Tint $1))
    129     (FLOAT)                         : (LiteralExpr (Tfloat $1))
    130     (TRUE)                          : (LiteralExpr (Tbool #t))
    131     (FALSE)                         : (LiteralExpr (Tbool #f))
    132     (STRING)                        : (LiteralExpr (Tstr $1))
    133     (NULL)                          : (LiteralExpr (Tnull))
    134     (expr LPAREN expr-list RPAREN)  : (ApplyExpr $1 $3)
    135     (expr DOT ident)                : (DotExpr $1 $3)
     113    (expr1)                         : $1
    136114    (expr LBRACKET STRING RBRACKET) : (DotExpr $1 (IdentExpr (string->symbol $3)))
    137115    (NOT expr)                      : (NotOpExpr $2)
    138116;;    (MINUS expr)                    : (NegativeOpExpr $2)
    139     (LBRACKET expr-list RBRACKET)   : (ListExpr $2)
    140     (LBRACE assoc-list RBRACE)      : (ObjExpr $2)
    141117    (expr PLUS expr)                : (PlusOpExpr $1 $3)
    142118    (expr MINUS expr)               : (MinusOpExpr $1 $3)
     
    157133    (expr IS expr expr)             : (TestOpExpr $1 (ApplyExpr $3 (list $4)))
    158134    (expr IS expr)                  : (TestOpExpr $1 $3)
    159     (LPAREN expr RPAREN)            : $2
    160135    (ident EQ expr)                 : (KeywordExpr $1 $3)
    161136    (ident AS ident)                : (AliasExpr $1 $3)
    162 ;;    (LPAREN expr-list RPAREN)       : (SetExpr $2)
    163137    )
    164138
    165 (assoc-list
    166  (assoc) :  (list $1)
    167  (assoc COMMA assoc-list) : (cons $1 $3)
    168  )
     139    (expr1
     140     (expr0)                          : $1
     141     (expr1 LPAREN expr-list RPAREN ) : (ApplyExpr $1 $3)
     142     (LBRACKET expr-list RBRACKET)    : (ListExpr $2)
     143     (LPAREN expr-list RPAREN)        : (SetExpr $2)
     144     (LBRACE assoc-list RBRACE)       : (ObjExpr $2)
     145     )
    169146
    170 (assoc
    171   (expr COLON expr) : (cons $1 $3))
     147    (expr0
     148     (ident)                         : $1
     149     (INT)                           : (LiteralExpr (Tint $1))
     150     (FLOAT)                         : (LiteralExpr (Tfloat $1))
     151     (TRUE)                          : (LiteralExpr (Tbool #t))
     152     (FALSE)                         : (LiteralExpr (Tbool #f))
     153     (STRING)                        : (LiteralExpr (Tstr $1))
     154     (NULL)                          : (LiteralExpr (Tnull))
     155     (expr DOT ident)                : (DotExpr $1 $3)
     156     (LPAREN expr RPAREN)            : $2)
     157
     158    (expr-list
     159     () : (list)
     160     (expr) : (list $1)
     161     (expr COMMA expr-list) : (cons $1 $3)
     162     )
    172163
    173164
    174 (opt-args
    175  () : (list)
    176  (LPAREN expr-list RPAREN) : $2
    177  )
     165   (ident-list
     166    (ident) : (list $1)
     167    (ident COMMA ident-list) : (cons $1 $3)
     168    )
     169
     170   (ident
     171    (IDENT) : (IdentExpr $1)
     172    )
     173
     174   (assoc-list
     175    (assoc) :  (list $1)
     176    (assoc COMMA assoc-list) : (cons $1 $3)
     177    )
     178
     179   (assoc
     180    (expr COLON expr) : (cons $1 $3))
     181   
     182   
     183   (opt-args
     184    () : (list)
     185    (LPAREN expr-list RPAREN) : $2
     186    )
    178187
    179188
  • release/4/ersatz/trunk/make-ersatz-lexer.scm

    r26879 r26880  
    218218                                     (tok yyline IDENT word))))
    219219                              )
     220
    220221"=="  (cases lexer-mode (lexer-curmode)
    221222               (LexerPlain ()
     
    224225               (else
    225226                (tok yyline EQEQ)))
     227
     228"**"  (cases lexer-mode (lexer-curmode)
     229               (LexerPlain ()
     230                           (display yytext (lexer-text-buffer))
     231                           (yycontinue))
     232               (else
     233                (tok yyline POWER)))
    226234
    227235.     (cases lexer-mode (lexer-curmode)
  • release/4/ersatz/trunk/parser.scm

    r26879 r26880  
    193193                          ("+" .  PLUS)
    194194                          ("-" .  MINUS)
    195                           ("**" . POWER)
    196195                          ("*" .  TIMES)
    197196                          ("/" .  DIV)
     
    409408                                                    (lexer-token-cache (cdr c))
    410409                                                    t))))
    411 ;                                   (if (lexical-token? t)
    412 ;                                       (print "lexer: token = " (lexical-token-category t))
    413 ;                                       (print "lexer: token = " t))
     410                                    (if (lexical-token? t)
     411                                        (print "lexer: token = " (lexical-token-category t))
     412                                        (print "lexer: token = " t))
    414413                                       t)))
    415414                                 (make-parse-error file-path)))))
  • release/4/ersatz/trunk/runtime.scm

    r26858 r26880  
    335335                 (cond ((assoc pname alst) => cdr)
    336336                       (else  (Tnull))))
    337            (else (or (get-func oname pname) (Tnull))))
     337           (else (Tnull)))
    338338    ))
    339339
     
    980980
    981981(define whitespace-pat (sre->irregex '($ (+ whitespace))))
     982
    982983(define (op-wordcount text kwargs)
    983984  (let ((str (unbox-string text)))
     985    (print "wordcount: str = " str)
    984986    (Tint (length (irregex-split whitespace-pat str)))))
    985987
     
    10101012
    10111013(define (op-list value kwargs)
     1014  (cases tvalue value
     1015         (Tlist (lst) value)
     1016         (Tset (lst)  (Tlist lst))
     1017         (Tstr (str)
     1018               (let ((len (string-length str)))
     1019                 (let iter ((ret '()) (i len))
     1020                   (if (zero? i)
     1021                       (Tlist ret)
     1022                       (let ((s1 (Tstr (substring str (- i 1) i))))
     1023                         (iter (cons s1 ret) (- i 1)))
     1024                       ))
     1025                 ))
     1026         (else (error 'list "operand type error" value))
     1027         ))
     1028
     1029
     1030(define (op-set value kwargs)
    10121031  (cases tvalue value
    10131032         (Tlist (lst) value)
  • release/4/ersatz/trunk/tests/run.scm

    r26879 r26880  
    379379)
    380380
    381 
    382381(print (from-file "cheatsheet.tmpl"
    383382                  env: (template-std-env search-path: '("tests/tmpl"))))
  • release/4/ersatz/trunk/tests/tmpl/cheatsheet.tmpl

    r26879 r26880  
    16162*3 = {{ 2 * 3 }}
    17174/2 = {{ 4 / 2 }}
    18 {#
    19188^3 = {{ 8 ** 3 }}
    20198%3 = {{ 8 % 3 }}
     
    5453========
    5554
    56 {% for item in list %}
     55
     56{% for item in [1,2,3,4,5] %}
    5757{% set tmp = "hoge" %}
    5858<p>{{item}}</p>
    5959<p>{{loop.cycle(1,2,3)}}</p>
    60 <p>tmp = {{tmp}}</p>
    61 {% endfor %}
    62 
    63 {% for (href, title) in [("http://yahoo.co.jp", "yahoo japan"), ("http://google.co.jp", "google japan")] %}
     60<p>tmp = {{item}}</p>
     61{% endfor %}
     62
     63{% for href, title in [ ("http://yahoo.co.jp", "yahoo japan") ] %}
    6464<a href="{{href}}">{{title}}</a>
    6565{% endfor %}
     
    6969{% endfor %}
    7070
     71{% for href, title in [("http://yahoo.co.jp", "yahoo japan"), ("http://google.co.jp", "google japan")] %}
     72<a href="{{href}}">{{title}}</a>
     73{% endfor %}
     74
    7175obj test
    7276=========
     77
     78{% set obj = { age:10, name: 'aa' } %}
    7379
    7480name = {{obj.name}}
     
    8995range(3,0) = {% for x in range(3,0) %}{{x}}{% endfor %}
    9096
    91 strlen("hogehoge") = {{ strlen("hogehoge") }}
     97strlen("testtest") = {{ strlen("testtest") }}
    9298strlen("日本語") = {{ strlen("日本語") }}
    9399
    94100round floor of 1.5 = {{1.5|round("floor")|int}}
    95101round ceil of 1.5 = {{1.5|round("ceil")|int}}
     102{#
    96103
    97104join(",", list) = {{ join(",", list) }}
Note: See TracChangeset for help on using the changeset viewer.