-
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
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
본 자료는 미리보기를 지원하지 않습니다.

-
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
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125


목차
프로그래밍언어론 hw1~9.zip
3.61mb
------------------------------------------------------
hw-01 : HomeWork1.jpg
hw-02 : mycount.scm, myfind.scm, mylength.scm, mysum.scm, mytrans.scm
hw-03 : p_1.jpg, p_2.jpg
hw-04 : datatype.scm, test.scm
hw-05 : parse.scm, test.scm
hw-06 : tests(테스트프로그램폴더), env.scm, Let, misc.scm, parse.scm, run.scm, value.scm
hw-07 : tests(테스트프로그램폴더), env.scm, letrec, misc.scm, parse.scm, run.scm, value.scm
hw-08 : my(add, loop, multi, power), tests, env.scm implicit-refs, misc.scm, parse.scm, parse.scm.bak, run.scm, store.scm, value.scm
hw-09 : tests, check.scm, checked, env.scm, misc.scm, parse.scm, run.scm, tenv.scm, value.scm
3.61mb
------------------------------------------------------
hw-01 : HomeWork1.jpg
hw-02 : mycount.scm, myfind.scm, mylength.scm, mysum.scm, mytrans.scm
hw-03 : p_1.jpg, p_2.jpg
hw-04 : datatype.scm, test.scm
hw-05 : parse.scm, test.scm
hw-06 : tests(테스트프로그램폴더), env.scm, Let, misc.scm, parse.scm, run.scm, value.scm
hw-07 : tests(테스트프로그램폴더), env.scm, letrec, misc.scm, parse.scm, run.scm, value.scm
hw-08 : my(add, loop, multi, power), tests, env.scm implicit-refs, misc.scm, parse.scm, parse.scm.bak, run.scm, store.scm, value.scm
hw-09 : tests, check.scm, checked, env.scm, misc.scm, parse.scm, run.scm, tenv.scm, value.scm
본문내용
parse.scm의 내용 중
-----------------------------------------------------------------------
;; ======================================================================
(define-datatype program program?
(a-program (exp1 expression?)))
(define-datatype expression expression?
(const-exp (num number?))
(var-exp (var symbol?))
(zero?-exp (exp1 expression?))
(diff-exp (exp1 expression?) (exp2 expression?))
(mul-exp (exp1 expression?) (exp2 expression?))
(if-exp (exp1 expression?) (exp2 expression?) (exp3 expression?))
(let-exp (var symbol?) (exp1 expression?) (exp2 expression?))
(proc-exp (var symbol?) (ty type?) (body expression?))
(call-exp (rator expression?) (rand expression?))
(letrec-exp (p-result-type type?) (p-name symbol?)
(b-var symbol?) (b-var-type type?)
(p-body expression?) (letrec-body expression?)))
(define-datatype type type?
(int-type)
(bool-type)
(proc-type (arg-type type?) (result-type type?)))
;; ======================================================================
(define scanner-rules
'((whitespace (whitespace) skip)
(comment ("%" (arbno (not #\newline))) skip)
(identifier (letter (arbno (or letter digit "_" "?"))) symbol)
(number (digit (arbno digit)) number)
(number ("-" digit (arbno digit)) number)))
(define parser-rules
'((program (expression) a-program)
(expression (number) const-exp)
(expression (identifier) var-exp)
(expression ("zero?" "(" expression ")") zero?-exp)
(expression ("-" "(" expression "," expression ")") diff-exp)
(expression ("*" "(" expression "," expression ")") mul-exp)
(expression ("if" expression "then" expression "else" expression) if-exp)
(expression ("let" identifier "=" expression "in" expression) let-exp)
(expression ("proc" "(" identifier ":" type ")" expression) proc-exp)
(expression ("(" expression expression ")") call-exp)
(expression ("letrec" type identifier "(" identifier ":" type ")" "=" expression
"in" expression) letrec-exp)
(type ("int") int-type)
(type ("bool") bool-type)
(type ("(" type "->" type ")") proc-type)))
(define scan&parse
(sllgen:make-string-parser scanner-rules parser-rules))
;; ======================================================================
-----------------------------------------------------------------------
;; ======================================================================
(define-datatype program program?
(a-program (exp1 expression?)))
(define-datatype expression expression?
(const-exp (num number?))
(var-exp (var symbol?))
(zero?-exp (exp1 expression?))
(diff-exp (exp1 expression?) (exp2 expression?))
(mul-exp (exp1 expression?) (exp2 expression?))
(if-exp (exp1 expression?) (exp2 expression?) (exp3 expression?))
(let-exp (var symbol?) (exp1 expression?) (exp2 expression?))
(proc-exp (var symbol?) (ty type?) (body expression?))
(call-exp (rator expression?) (rand expression?))
(letrec-exp (p-result-type type?) (p-name symbol?)
(b-var symbol?) (b-var-type type?)
(p-body expression?) (letrec-body expression?)))
(define-datatype type type?
(int-type)
(bool-type)
(proc-type (arg-type type?) (result-type type?)))
;; ======================================================================
(define scanner-rules
'((whitespace (whitespace) skip)
(comment ("%" (arbno (not #\newline))) skip)
(identifier (letter (arbno (or letter digit "_" "?"))) symbol)
(number (digit (arbno digit)) number)
(number ("-" digit (arbno digit)) number)))
(define parser-rules
'((program (expression) a-program)
(expression (number) const-exp)
(expression (identifier) var-exp)
(expression ("zero?" "(" expression ")") zero?-exp)
(expression ("-" "(" expression "," expression ")") diff-exp)
(expression ("*" "(" expression "," expression ")") mul-exp)
(expression ("if" expression "then" expression "else" expression) if-exp)
(expression ("let" identifier "=" expression "in" expression) let-exp)
(expression ("proc" "(" identifier ":" type ")" expression) proc-exp)
(expression ("(" expression expression ")") call-exp)
(expression ("letrec" type identifier "(" identifier ":" type ")" "=" expression
"in" expression) letrec-exp)
(type ("int") int-type)
(type ("bool") bool-type)
(type ("(" type "->" type ")") proc-type)))
(define scan&parse
(sllgen:make-string-parser scanner-rules parser-rules))
;; ======================================================================
소개글