/
Interpreter.html
130 lines (130 loc) · 6.28 KB
/
Interpreter.html
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
126
127
128
129
130
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="949.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #000000}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #606060}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #bf0000}
p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #000000; min-height: 16.0px}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px}
span.s1 {text-decoration: underline}
span.s2 {color: #0000bf}
span.s3 {color: #000000}
span.s4 {color: #606060}
span.s5 {font: 12.0px Helvetica; color: #000000}
span.s6 {color: #0000ff}
span.s7 {color: #bf0000}
</style>
</head>
<body>
<p class="p1"><b>Interpreter</b></p>
<p class="p2"><br></p>
<p class="p3"><b>superclass: Object</b></p>
<p class="p2"><br></p>
<p class="p3">The interpreter defines a context in which interactive commands are compiled and executed.</p>
<p class="p2"><br></p>
<p class="p3">In the interpreter, <span class="s1">this</span> refers to the interpreter itself, e.g.:</p>
<p class="p2"><br></p>
<p class="p4"><span class="s2">this</span>.postln</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p5"><b><span class="s1">Accessing</span></b></p>
<p class="p2"><br></p>
<p class="p3">The interpreter defines instance variables 'a' through 'z' which are always available in the interpreter. By convention, the variable 's' is used to hold the default <b>Server</b>. Assigning another value to 's' may cause some of the examples in the documentation to fail.<span class="Apple-converted-space"> </span></p>
<p class="p2"><br></p>
<p class="p3"><b>clearAll</b></p>
<p class="p2"><br></p>
<p class="p3">set the values of the variables 'a' through 'z' to nil.</p>
<p class="p2"><br></p>
<p class="p4">(</p>
<p class="p4">x = 123;</p>
<p class="p4">x.postln;</p>
<p class="p4"><span class="s2">this</span>.clearAll;</p>
<p class="p4">x.postln;</p>
<p class="p4">)</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p5"><b><span class="s1">Compile & Interpret</span></b></p>
<p class="p2"><br></p>
<p class="p3"><b>interpret(aString)</b></p>
<p class="p2"><br></p>
<p class="p3">Compile and execute a String.</p>
<p class="p2"><br></p>
<p class="p6"><span class="s2">this</span><span class="s3">.interpret(</span>"(123 + 4000).postln"<span class="s3">);</span></p>
<p class="p2"><br></p>
<p class="p3"><b>interpretPrint(aString)</b></p>
<p class="p2"><br></p>
<p class="p3">Compile and execute a String, printing the result.</p>
<p class="p2"><br></p>
<p class="p4"><span class="s2">this</span>.interpretPrint(<span class="s4">"123 + 4000"</span>);</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p3"><b>compile(aString)</b></p>
<p class="p2"><br></p>
<p class="p3">Compile a String and return a Function.</p>
<p class="p2"><br></p>
<p class="p7">(</p>
<p class="p6"><span class="s5">z = </span><span class="s2">this</span><span class="s3">.compile(</span>"(123 + 4000).postln"<span class="s3">);</span></p>
<p class="p4">z.postln;</p>
<p class="p4">z.value;</p>
<p class="p4">)</p>
<p class="p2"><br></p>
<p class="p3"><b>compileFile(pathName)</b></p>
<p class="p2"><br></p>
<p class="p3">Reads the file at pathName, compiles it and returns a Function.<span class="Apple-converted-space"> </span></p>
<p class="p3">The file must contain a valid SuperCollider expression, naturally.</p>
<p class="p3">This will not compile class definitions, only expressions.</p>
<p class="p2"><br></p>
<p class="p3"><b>executeFile(pathName)</b></p>
<p class="p2"><br></p>
<p class="p3">Reads the file at pathName, compiles it and executes it, returning the result.<span class="Apple-converted-space"> </span></p>
<p class="p3">The file must contain a valid SuperCollider expression, naturally.</p>
<p class="p3">This will not compile class definitions, only expressions.</p>
<p class="p2"><br></p>
<p class="p3"><b>cmdLine</b></p>
<p class="p2"><br></p>
<p class="p3">Returns the previosly interpreted code.</p>
<p class="p2"><br></p>
<p class="p4">(</p>
<p class="p4">1 + 2;</p>
<p class="p4"><span class="s2">this</span>.cmdLine</p>
<p class="p4">)</p>
<p class="p2"><br></p>
<p class="p3"><b>codeDump</b></p>
<p class="p2"><br></p>
<p class="p3">this interpreter variable can be set to evaluate a function with any sucessfully compiled code.</p>
<p class="p3">see e.g. the class <a href="../../Libraries/JITLib/extras/History.html"><span class="s6">History</span></a>.</p>
<p class="p2"><br></p>
<p class="p8"><span class="s3">a = [ ]; </span>// store all the code evaulated in a</p>
<p class="p4"><span class="s2">this</span>.codeDump = { <span class="s2">|code|</span> a = a.add(code) };</p>
<p class="p4">1 + 3;</p>
<p class="p4">f = { <span class="s4">"hallo"</span> };</p>
<p class="p4">a.postcs;</p>
<p class="p8"><span class="s3">codeDump = </span><span class="s2">nil</span><span class="s3">; </span>// reset to nil.</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p3"><b>preProcessor</b></p>
<p class="p2"><br></p>
<p class="p3">can be used to modify code before it is interpreted. Given appropriate delimiters, this can be used to implement little languages.</p>
<p class="p2"><br></p>
<p class="p8">// silly but simple: understand a Saw for every SinOsc</p>
<p class="p4"><span class="s2">this</span>.preProcessor = { <span class="s2">|code|</span> code.replace(<span class="s4">"SinOsc"</span>, <span class="s4">"Saw"</span>) };</p>
<p class="p9"><br></p>
<p class="p4">{ <span class="s2">SinOsc</span>.ar(200) * 0.1 }.play;</p>
<p class="p9"><br></p>
<p class="p4">preProcessor = <span class="s2">nil</span>; <span class="s7">// reset to nil.</span></p>
<p class="p10"><br></p>
<p class="p10"><br></p>
<p class="p10"><br></p>
</body>
</html>