close Warning: Can't synchronize with repository "(default)" (The repository directory has changed, you should resynchronize the repository with: trac-admin $ENV repository resync '(default)'). Look in the Trac log for more information.

Changeset 4405


Ignore:
Timestamp:
2016-06-07T19:34:32-07:00 (8 years ago)
Author:
Marek Rychlik
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/f4grobner/infix-printer.lisp

    r4404 r4405  
    8181  (cond
    8282    ;; Handle *print-level*
    83    ((and (numberp *print-level*)
    84          (> print-level *print-level*))
    85     (format stream "#"))
     83    ((and (numberp *print-level*)
     84          (> print-level *print-level*))
     85     (format stream "#"))
    8686
    87    ;; Null expression is an error
    88    ((null expr)
    89     (error "Null expression."))
     87    ;; Null expression is an error
     88    ((null expr)
     89     (error "Null expression."))
    9090
    91    ;; Atoms are printed using ~A format directive
    92    ((atom expr)
    93     (format stream "~a" expr))
     91    ;; Atoms are printed using ~A format directive
     92    ((atom expr)
     93     (format stream "~a" expr))
    9494   
    95    ;; Check if the operator of this expression has lower precedence
    96    ;; than the surrounding operator, and parenthesize if necessary
    97    ((and op
    98          (operator-lessp (car expr) op))
    99     (format stream "(")
    100     (infix-print expr stream nil (1+ print-level))
    101     (format stream ")"))
     95    ;; Check if the operator of this expression has lower precedence
     96    ;; than the surrounding operator, and parenthesize if necessary
     97    ((and op
     98          (operator-lessp (car expr) op))
     99     (format stream "(")
     100     (infix-print expr stream nil (1+ print-level))
     101     (format stream ")"))
    102102
    103    ;; Unary minus needs special handling
    104    ((and (eq (car expr) '-) (endp (cddr expr)))
    105     (format stream "-")
    106     ;; Print the second element in product context
    107     (infix-print (cadr expr) stream '* (1+ print-level)))
     103    ;; Unary minus needs special handling
     104    ((and (eq (car expr) '-) (endp (cddr expr)))
     105     (format stream "-")
     106     ;; Print the second element in product context
     107     (infix-print (cadr expr) stream '* (1+ print-level)))
    108108
    109    ;; All other operators
    110    (t
    111     (case (car expr)
     109    ;; All other operators
     110    (t
     111     (case (car expr)
    112112
    113       ;; Arithmetic operators
    114       ((+ - * /)
    115        (infix-print-separated-list
    116         (cdr expr)                     
    117         (car expr)                     
    118         stream
    119         (car expr)                     
    120         (1+ print-level)               
    121         (cond ((eq (car expr) '+) '-)
    122               ((eq (car expr) '-) '-)
    123               (t nil))))
     113       ;; Arithmetic operators
     114       ((+ - * /)
     115        (infix-print-separated-list
     116         (cdr expr)                     
     117         (car expr)                     
     118         stream
     119         (car expr)                     
     120         (1+ print-level)               
     121         (cond ((eq (car expr) '+) '-)
     122               ((eq (car expr) '-) '-)
     123               (t nil))))
    124124
    125       ;; Exponentials
    126       (expt
    127        (unless (= (length (cdr expr)) 2)
    128          (error "expt must take 2 arguments."))
    129        (infix-print-separated-list
    130         (cdr expr)
    131         '^
    132         stream
    133         '^
    134         (1+ print-level)))
     125       ;; Exponentials
     126       (expt
     127        (unless (= (length (cdr expr)) 2)
     128          (error "expt must take 2 arguments."))
     129        (infix-print-separated-list
     130         (cdr expr)
     131         '^
     132         stream
     133         '^
     134         (1+ print-level)))
    135135
    136       ;; Assuming function call
    137       (otherwise               
    138        (cond
     136       ;; Assuming function call
     137       (otherwise               
     138        (cond
    139139
    140          ;; Handle array references
    141          ((eq (car expr) 'aref)
    142           ;; Special syntax for subscripted variables
    143           ;; consistent with the infix package.
    144           (format stream "~a[" (cadr expr))
    145           (infix-print-separated-list (cddr expr) '\, stream '\, (1+ print-level))
    146           (format stream "]"))
     140          ;; Handle array references
     141          ((eq (car expr) 'aref)
     142           ;; Special syntax for subscripted variables
     143           ;; consistent with the infix package.
     144           (format stream "~a[" (cadr expr))
     145           (infix-print-separated-list (cddr expr) '\, stream '\, (1+ print-level))
     146           (format stream "]"))
    147147
    148          ;; Handle lists
    149          ((and (symbolp (car expr))
    150                (string= (symbol-name (car expr)) "["))
    151           (format stream "[")
    152           (infix-print-separated-list (cdr expr) '\, stream '\, (1+ print-level))
    153           (format stream "]"))
     148          ;; Handle lists
     149          ((and (symbolp (car expr))
     150                (string= (symbol-name (car expr)) "["))
     151           (format stream "[")
     152           (infix-print-separated-list (cdr expr) '\, stream '\, (1+ print-level))
     153           (format stream "]"))
    154154
    155          ;; Handle generic function call syntax
    156          (t
    157           (format stream "~a(" (car expr))
    158           (infix-print-arg-list (cdr expr) stream (1+ print-level))
    159           (format stream ")")))))))
     155          ;; Handle generic function call syntax
     156          (t
     157           (format stream "~a(" (car expr))
     158           (infix-print-arg-list (cdr expr) stream (1+ print-level))
     159           (format stream ")")))))))
    160160  (values))
    161161
Note: See TracChangeset for help on using the changeset viewer.