First step in implementing updated probability model ---
modification to P(error) svn: r14368
This commit is contained in:
parent
2969412c87
commit
72e2049f96
|
@ -181,7 +181,7 @@
|
|||
[else out]))))
|
||||
)
|
||||
|
||||
(define-unit rank-defaults@
|
||||
#;(define-unit rank-defaults@
|
||||
(import)
|
||||
(export ranking-parameters^)
|
||||
(define (rank-choice choices) (apply max choices))
|
||||
|
@ -189,6 +189,15 @@
|
|||
(rank-misspell rank-caps rank-class rank-wrong rank-end)
|
||||
(values 4/5 9/10 2/5 1/5 2/5)))
|
||||
|
||||
(define-unit rank-defaults@
|
||||
(import)
|
||||
(export ranking-parameters^)
|
||||
(define (rank-choice choices) (apply max choices))
|
||||
(define-values
|
||||
(rank-misspell rank-caps rank-class rank-wrong rank-end rank-repeat)
|
||||
(values 16/71 18/71 8/71 4/71 8/71 17/71)))
|
||||
|
||||
|
||||
(define-unit out-struct@
|
||||
(import)
|
||||
(export out^)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
(export combinator-parser-forms^)
|
||||
|
||||
(define return-name "dummy")
|
||||
(define terminal-occurs "unique-eq")
|
||||
|
||||
(define (make-weak-map) (make-weak-hasheq))
|
||||
|
||||
|
@ -34,7 +35,8 @@
|
|||
;terminal: ('a -> bool 'a -> 'b string) -> ( (list 'a) -> res )
|
||||
(define terminal
|
||||
(opt-lambda (pred build name [spell? #f] [case? #f] [class? #f])
|
||||
(let* ([fail-str (string-append "failed " name)]
|
||||
(let* ([memo-table (make-weak-map)]
|
||||
[fail-str (string-append "failed " name)]
|
||||
[t-name (if src? (lambda (t) (token-name (position-token-token t))) token-name)]
|
||||
[t-val (if src? (lambda (t) (token-value (position-token-token t))) token-value)]
|
||||
[spell? (or spell?
|
||||
|
@ -62,15 +64,18 @@
|
|||
(opt-lambda (input [last-src (list 1 0 1 0)] [alts 1])
|
||||
#;(printf "terminal ~a~n" name)
|
||||
#;(cond
|
||||
[(eq? input return-name)
|
||||
(printf "dummy given~n")]
|
||||
[(null? input) (printf "null given~n")]
|
||||
[(eq? input return-name) (printf "name requested~n")]
|
||||
[(null? input) (printf "null input~n")]
|
||||
[else
|
||||
(let ([token (position-token-token (car input))])
|
||||
(printf "Look at token ~a~n" token)
|
||||
(printf "calling pred: ~a~n" (pred token)))])
|
||||
(printf "Token given ~a, match? ~a~n" token (pred token)))])
|
||||
(cond
|
||||
[(eq? input return-name) name]
|
||||
[(eq? input terminal-occurs) (list (make-occurs name 1))]
|
||||
[(weak-map-get memo-table input #f) (weak-map-get memo-table input)]
|
||||
[else
|
||||
(let ([result
|
||||
(cond
|
||||
[(null? input)
|
||||
(fail-res null (make-terminal-fail rank-end last-src name 0 0 'end #f))]
|
||||
[else
|
||||
|
@ -84,8 +89,7 @@
|
|||
[else
|
||||
#;(printf "Incorrect input for ~a : ~a miscase? ~a misspell? ~a ~n" name
|
||||
(cond
|
||||
[(token-value token)
|
||||
(token-value token)]
|
||||
[(token-value token) (token-value token)]
|
||||
[else (token-name token)])
|
||||
(case? curr-input)
|
||||
(spell? curr-input))
|
||||
|
@ -98,13 +102,15 @@
|
|||
(spell? curr-input)) 'misspell 1)]
|
||||
[(class? curr-input) (values rank-class 'missclass 1)]
|
||||
[else (values rank-wrong 'wrong 0)])])
|
||||
(make-fail chance name kind curr-input may-use)))]))])))))
|
||||
(make-fail chance name kind curr-input may-use)))]))])])
|
||||
(weak-map-put! memo-table input result))])))))
|
||||
|
||||
;seq: ( (list ((list 'a) -> res)) ((list 'b) -> 'c) string -> ((list 'a) -> result)
|
||||
(define seq
|
||||
(opt-lambda (sub-list build name [id-position 0])
|
||||
(let* ([sequence-length (length sub-list)]
|
||||
[memo-table (make-weak-map)]
|
||||
[terminal-counts #f]
|
||||
[prev (lambda (x)
|
||||
(cond [(eq? x return-name) "default previous"]
|
||||
[else (fail-res null null)]))]
|
||||
|
@ -131,6 +137,13 @@
|
|||
#;(unless (eq? input return-name) (printf "seq ~a~n" name))
|
||||
(cond
|
||||
[(eq? input return-name) name]
|
||||
[(eq? input terminal-occurs)
|
||||
(or terminal-counts
|
||||
(begin
|
||||
(set! terminal-counts 'counting)
|
||||
(set! terminal-counts
|
||||
(consolidate-count (map (lambda (symbol) (symbol terminal-occurs)) sub-list)))
|
||||
terminal-counts))]
|
||||
[(weak-map-get memo-table input #f)
|
||||
(weak-map-get memo-table input)]
|
||||
[(null? sub-list)
|
||||
|
@ -659,6 +672,7 @@
|
|||
(opt-lambda (input [start-src (list 1 0 1 0)] [alts 1])
|
||||
(cond
|
||||
[(eq? input return-name) (repeat-name)]
|
||||
[(eq? input terminal-occurs) (sub terminal-occurs)]
|
||||
[(weak-map-get memo-table input #f)(weak-map-get memo-table input)]
|
||||
[else
|
||||
(let ([ans
|
||||
|
@ -739,6 +753,7 @@
|
|||
;choice: [list [[list 'a ] -> result]] name -> result
|
||||
(define (choice opt-list name)
|
||||
(let ([memo-table (make-weak-map)]
|
||||
[terminal-counts #f]
|
||||
[num-choices (length opt-list)]
|
||||
[choice-names (lambda () (map (lambda (o) (o return-name)) opt-list))])
|
||||
(opt-lambda (input [last-src (list 0 0 0 0)] [alts 1])
|
||||
|
@ -746,8 +761,15 @@
|
|||
#;(printf "possible options are ~a~n" (choice-names))
|
||||
(let ([sub-opts (sub1 (+ alts num-choices))])
|
||||
(cond
|
||||
[(weak-map-get memo-table input #f) (weak-map-get memo-table input)]
|
||||
[(eq? input return-name) name]
|
||||
[(eq? input terminal-occurs)
|
||||
(or terminal-counts
|
||||
(begin
|
||||
(set! terminal-counts 'counting)
|
||||
(set! terminal-counts
|
||||
(consolidate-count (map (lambda (symbol) (symbol terminal-occurs)) opt-list)))
|
||||
terminal-counts))]
|
||||
[(weak-map-get memo-table input #f) (weak-map-get memo-table input)]
|
||||
[else
|
||||
#;(printf "choice ~a~n" name)
|
||||
#;(printf "possible options are ~a~n" (choice-names))
|
||||
|
|
|
@ -186,7 +186,7 @@
|
|||
(src? input-type show-options max-depth max-choice-depth))
|
||||
|
||||
(define-signature ranking-parameters^
|
||||
(rank-misspell rank-caps rank-class rank-wrong rank-end rank-choice))
|
||||
(rank-misspell rank-caps rank-class rank-wrong rank-end rank-choice rank-repeat))
|
||||
|
||||
(define-signature updating-rank^
|
||||
(blamed-terminal failed-last-parse))
|
||||
|
|
|
@ -38,6 +38,33 @@
|
|||
;(make-lazy-choice (listof res) fail-type (listof (_ -> res)) string)
|
||||
(define-struct (lazy-choice lazy-opts) (name) #:transparent)
|
||||
|
||||
;(make-count string int)
|
||||
(define-struct occurs (terminal count))
|
||||
|
||||
(define (consolidate-count cts)
|
||||
(cond
|
||||
[(null? cts) cts]
|
||||
[(eq? 'counting (car cts)) (consolidate-count cts)]
|
||||
[(pair? (car cts)) (consolidate-count (append (car cts) (cdr cts)))]
|
||||
[else
|
||||
(let-values ([(front back) (augment-count (car cts) (cdr cts))])
|
||||
(cons front (consolidate-count back)))]))
|
||||
(define (augment-count count rst)
|
||||
(cond
|
||||
[(null? rst) (values count rst)]
|
||||
[(eq? 'counting (car rst)) (augment-count count (cdr rst))]
|
||||
[(pair? (car rst)) (augment-count count (append (car rst) (cdr rst)))]
|
||||
[else
|
||||
(let-values ([(current back) (augment-count count (cdr rst))])
|
||||
(cond
|
||||
[(equal? (occurs-terminal count) (occurs-terminal (car rst)))
|
||||
(values (make-occurs (occurs-terminal count) (+ (occurs-count count)
|
||||
(occurs-count current)
|
||||
(occurs-count (car rst))))
|
||||
back)]
|
||||
[else (values current (cons (car rst) back))]))]))
|
||||
|
||||
|
||||
;parse-build = answer | none
|
||||
;(make-answer 'b)
|
||||
(define-struct answer (ast))
|
||||
|
|
Loading…
Reference in New Issue
Block a user