Changeset 26861 in project


Ignore:
Timestamp:
06/07/12 12:25:15 (9 years ago)
Author:
Ivan Raikov
Message:

ersatz: some parser experiments

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

Legend:

Unmodified
Added
Removed
  • release/4/ersatz/trunk/ersatz.setup

    r26858 r26861  
    1414       ("ersatz.l.scm" ("ersatz.l")
    1515        (run (csi -n -R silex
    16                   -e "'(lex-tables \"ersatz.l\" \"default-ersatz-lexer-table\" \"ersatz.l.scm\" (quote counters) (quote line))'")))
     16                  -e "'(lex-tables \"ersatz.l\" \"default-ersatz-lexer-table\" \"ersatz.l.scm\" (quote counters) (quote line) (quote code))'")))
    1717
    1818       ((dynld-name "ersatz-lib") ("ersatz-lib.scm" "runtime.scm" "eval.scm" "parser.scm" "ersatz.grm.scm" "ersatz.l.scm")
  • release/4/ersatz/trunk/parser.scm

    r26859 r26861  
    2929    ((tok ln t l) (make-lexical-token (quasiquote t) ln l))
    3030    ))
    31 
    32 
    33 (define (make-parse-error loc)
    34   (lambda (msg #!optional arg)
    35     (let ((loc-str (or (and loc (if (list? loc) (conc " " loc " ") (conc " (" loc ") "))) " ")))
    36       (cond  [(not arg) (error loc-str msg)]
    37              [(lexical-token? arg)
    38               (let ((src (lexical-token-source arg))
    39                     (cat (lexical-token-category arg)))
    40                 (error (sprintf "~Aline ~A: ~A "
    41                                 loc-str
    42                                 (if (integer? src) src (source-location-line src))
    43                                 msg)
    44                        (or (and cat (sprintf " ~A" cat)) "")
    45                        ))]
    46              [else (error loc-str (conc msg arg))]
    47              ))))
    48 
    4931
    5032(define-datatype lexer-mode lexer-mode?
     
    118100    ))
    119101
     102
    120103(define lexer-error error)
     104
     105
     106
     107
     108
     109(define (make-parse-error loc)
     110  (lambda (msg #!optional arg)
     111    (let ((loc-str (or (and loc (if (list? loc) (conc " " loc " ") (conc " (" loc ") "))) " ")))
     112      (cond  [(not arg) (error loc-str msg)]
     113             [(lexical-token? arg)
     114              (let ((src (lexical-token-source arg))
     115                    (cat (lexical-token-category arg)))
     116                (error (sprintf "~Aline ~A: ~A "
     117                                loc-str
     118                                (if (integer? src) src (source-location-line src))
     119                                msg)
     120                       (or (and cat (sprintf " ~A" cat)) "")
     121                       ))]
     122             [else (error loc-str (conc msg arg))]
     123             ))))
     124
    121125
    122126(include "ersatz.l.scm")
Note: See TracChangeset for help on using the changeset viewer.