-
Notifications
You must be signed in to change notification settings - Fork 0
/
genturfahi.scm
83 lines (71 loc) · 2.96 KB
/
genturfahi.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
;;;;
;;;; genturfahi - lo la .ckim. ke pe'a jajgau ratcu ke'e genturfa'i
;;;; `-> A Scheme packrat parser.
;;;;
;;;; Copyright (c) 2010 ".alyn.post." <[email protected]>
;;;;
;;;; Permission to use, copy, modify, and/or distribute this software for any
;;;; purpose with or without fee is hereby granted, provided that the above
;;;; copyright notice and this permission notice appear in all copies.
;;;;
;;;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
;;;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
;;;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
;;;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
;;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
;;;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
;;;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;;;;
;;;
;;; genturfa'i
;;;
;; parse the cfari javni in the gernu. This is the only
;; (nun)javni that does not require a |mapti| or |namapti|
;; continuation, as it instead generates and returns |val|
;; in |javni-valsi| to the caller.
;;
(define (genturfahi javni #!key (nonmatch-token #f)
(sentinel #\nul))
(define (cfisisku)
(if (secuxna-debug)
(call-with-output-file
(secuxna-debug-file)
(lambda (port)
(pretty-print (cfisisku-datni) port)))))
(define (junla)
(if (secuxna-profile)
(call-with-output-file
(secuxna-profile-file)
(lambda (port)
(pretty-print (junla-datni) port)))))
(define (mapti porsi valsi)
; always clear memoizations, which aren't valid when we get
; a new |porsi|.
(genturfahi-tolmohi)
(cfisisku) ; if debugging is enabled, output the debugging report.
(junla) ; if profiling is enabled, output the profiling report.
(values (javni-valsi-val valsi)
(lerfu-porsi-string porsi)))
(define (namapti porsi)
; always clear memoizations, which aren't valid when we get
; a new |porsi|.
(genturfahi-tolmohi)
(cfisisku) ; if debugging is enabled, output the debugging report.
(junla) ; if profiling is enabled, output the profiling report.
; set the exit status
(secuxna-exit-status 1)
(values nonmatch-token (lerfu-porsi-string porsi)))
(lambda (lefpoi)
(let ((porsi (if (port? lefpoi)
(make-lerfu-porsi-port lefpoi sentinel: sentinel)
(make-lerfu-porsi-string lefpoi sentinel: sentinel))))
(genturfahi-semorji (length porsi))
(javni porsi mapti namapti))))
(define (genturfahi* javni #!key (nonmatch-token #f)
(sentinel #\nul))
(let ((gerna (genturfahi javni nonmatch-token: nonmatch-token
sentinel: sentinel)))
(lambda (lefpoi)
(call-with-values
(lambda () (gerna lefpoi))
(lambda rodasumti rodasumti)))))