Changeset 12186 in project


Ignore:
Timestamp:
10/17/08 09:23:06 (11 years ago)
Author:
Ivan Raikov
Message:

Save.

Location:
release/3/nemo/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/expr-parser.scm

    r12185 r12186  
    157157    (stack-push! is lst)
    158158    (lambda ()
     159      (print "is = " (stack->list is))
    159160      (if (stack-empty? is)  '*eoi*
    160161          (let* ((p     (stack-pop! is))
    161                  (x     (and (not (null? p)) (car p))))
    162             (if x
    163                 (begin (stack-push! is (cdr p))
    164                        (match x
    165                               ((or '> '>= '< '>= '^ '+ '- '* '/ '= )      x)
    166                               ('?           (tok (QUESTION)))
    167                               (':           (tok (COLON)))
    168                               ((? number?)  (tok (NUM ,x)))
    169                               ((? symbol?)  (tok (ID ,x)))
    170                               ((? list?)    (begin (stack-push! is x)
    171                                                    (tok (LPAREN))))
    172                               (else (errorp ": invalid input: " x))))
    173                 (if (not (stack-empty? is)) (tok (RPAREN)))))))))
     162                 (x     (and (not (null? p)) (car p)))
     163                 (t     (if x
     164                            (begin (stack-push! is (cdr p))
     165                                   (match x
     166                                          ((or '> '>= '< '>= '^ '+ '- '* '/ '= )      x)
     167                                          ('?           (tok (QUESTION)))
     168                                          (':           (tok (COLON)))
     169                                          ((? number?)  (tok (NUM ,x)))
     170                                          ((? symbol?)  (tok (ID ,x)))
     171                                          ((? list?)    (begin (stack-push! is x)
     172                                                               (tok (LPAREN))))
     173                                          (else (errorp ": invalid input: " x))))
     174                            (if (not (stack-empty? is)) (tok (RPAREN)) '*eoi*))))
     175            (print " x = " x)
     176            (print " t = " t)
     177            t)))))
     178           
    174179 
    175180
    176181(define (nemo:parse-sym-expr lst)
    177   (or (and (list? lst) (null? lst) '())
    178       (expr-parser  (make-sym-lexer lst parse-error) parse-error)))
     182  (print "parse-sym-expr: lst = " lst)
     183  (cond ((number? lst)  lst)
     184        ((and (list? lst) (null? lst) '()))
     185        (else (expr-parser  (make-sym-lexer lst parse-error) parse-error))))
    179186
    180187
  • release/3/nemo/trunk/expr.grm

    r12185 r12186  
    99
    1010   ;; --- token definitions
    11    (ID NUM LET RPAREN
     11   ( ID NUM LET RPAREN
    1212       (right: QUESTION COLON)
    1313       (left: < > =)
     
    1616       (left: uminus)
    1717       (right: ^ )
    18        (right: LPAREN)
     18       (left: LPAREN)
    1919       )
    2020
    2121
    22    (expr     (NUM)                   : (exact->inexact (token-value $1))
    23              (ID)                    : (token-value $1)
    24              (ID LPAREN RPAREN)      : `(,(token-value $1))
    25              (ID LPAREN args RPAREN) : `(,(token-value $1) . ,(reverse $3))
    26              (expr + expr)           : `(+ ,$1 ,$3)
    27              (expr - expr)           : `(- ,$1 ,$3)
    28              (expr * expr)           : `(* ,$1 ,$3)
    29              (expr / expr)           : `(/ ,$1 ,$3)
    30              (- expr (prec: uminus)) : `(- ,$2)
    31              (expr ^ expr)           : `(pow ,$1 ,$3)
    32              (expr > expr)           : `(> ,$1 ,$3)
    33              (expr < expr)           : `(< ,$1 ,$3)
    34              (expr < = expr)         : `(<= ,$1 ,$3)
    35              (expr > = expr)         : `(>= ,$1 ,$3)
     22   (expr     (NUM)                    : (exact->inexact (token-value $1))
     23             (ID)                     : (token-value $1)
     24             (ID LPAREN RPAREN)       : `(,(token-value $1))
     25             (ID LPAREN args RPAREN)  : `(,(token-value $1) . ,(reverse $3))
     26             (expr + expr)            : `(+ ,$1 ,$3)
     27             (expr - expr)            : `(- ,$1 ,$3)
     28             (expr * expr)            : `(* ,$1 ,$3)
     29             (expr / expr)            : `(/ ,$1 ,$3)
     30             (- expr (prec: uminus))  : `(- ,$2)
     31             (expr ^ expr)            : `(pow ,$1 ,$3)
     32             (expr > expr)            : `(> ,$1 ,$3)
     33             (expr < expr)            : `(< ,$1 ,$3)
     34             (expr < = expr)          : `(<= ,$1 ,$3)
     35             (expr > = expr)          : `(>= ,$1 ,$3)
    3636             (expr QUESTION expr COLON expr) :  `(if ,$1 ,$3 ,$5)
    3737             (LET LPAREN bnds RPAREN expr)   :  `(let ,(reverse $3) ,$5)
    38              (LPAREN expr RPAREN)    : $2 )
     38             (LPAREN expr RPAREN)     : $2
     39             )
    3940
    40    (args     (expr)                  : (list $1)
    41              (args expr)             : (cons $3 $1))
     41   (args     (expr)                   : (list $1)
     42             (args expr)              : (cons $2 $1))
    4243
    43    (bnds     (binding)               : (list $1)
    44              (bnds binding)          : (cons $3 $1))
     44   (bnds     (binding)                : (list $1)
     45             (bnds binding)           : (cons $2 $1))
    4546
    4647   (binding  (LPAREN ID expr RPAREN)  : (list $1 $2))
Note: See TracChangeset for help on using the changeset viewer.