92
|
1 {
|
|
2 "cells": [
|
|
3 {
|
|
4 "cell_type": "markdown",
|
|
5 "metadata": {},
|
|
6 "source": [
|
|
7 "# CbC kernel"
|
|
8 ]
|
|
9 },
|
|
10 {
|
|
11 "cell_type": "markdown",
|
|
12 "metadata": {},
|
|
13 "source": [
|
|
14 "## Hello CbC!"
|
|
15 ]
|
|
16 },
|
|
17 {
|
|
18 "cell_type": "code",
|
|
19 "execution_count": 4,
|
|
20 "metadata": {
|
|
21 "scrolled": true
|
|
22 },
|
|
23 "outputs": [
|
|
24 {
|
|
25 "name": "stdout",
|
|
26 "output_type": "stream",
|
|
27 "text": [
|
|
28 "Hello CbC!\n"
|
|
29 ]
|
|
30 },
|
|
31 {
|
|
32 "name": "stderr",
|
|
33 "output_type": "stream",
|
|
34 "text": [
|
|
35 "[CbC kernel] Executable exited with code 11"
|
|
36 ]
|
|
37 }
|
|
38 ],
|
|
39 "source": [
|
|
40 "#define __environment _CbC_environment\n",
|
|
41 "#define __return _CbC_return\n",
|
|
42 "\n",
|
|
43 "extern int printf(const char*, ...);\n",
|
|
44 "\n",
|
|
45 "__code Hello_CbC();\n",
|
|
46 "\n",
|
|
47 "int main(int argc, char **argv){\n",
|
|
48 " goto Hello_CbC();\n",
|
|
49 " return 0;\n",
|
|
50 "}\n",
|
|
51 "\n",
|
|
52 "__code Hello_CbC(){\n",
|
|
53 " printf(\"Hello CbC!\\n\");\n",
|
|
54 " \n",
|
|
55 "}"
|
|
56 ]
|
|
57 },
|
|
58 {
|
|
59 "cell_type": "markdown",
|
|
60 "metadata": {},
|
|
61 "source": [
|
|
62 "## fizzbazz"
|
|
63 ]
|
|
64 },
|
|
65 {
|
|
66 "cell_type": "markdown",
|
|
67 "metadata": {},
|
|
68 "source": [
|
|
69 "https://gist.github.com/hanachin/3e2f9034e0fe382f019e55de4c6b016b"
|
|
70 ]
|
|
71 },
|
|
72 {
|
|
73 "cell_type": "code",
|
|
74 "execution_count": 2,
|
|
75 "metadata": {},
|
|
76 "outputs": [
|
|
77 {
|
|
78 "name": "stdout",
|
|
79 "output_type": "stream",
|
|
80 "text": [
|
|
81 "1\n",
|
|
82 "2\n",
|
|
83 "Fizz\n",
|
|
84 "4\n",
|
|
85 "Buzz\n",
|
|
86 "Fizz\n",
|
|
87 "7\n",
|
|
88 "8\n",
|
|
89 "Fizz\n",
|
|
90 "Buzz\n",
|
|
91 "11\n",
|
|
92 "Fizz\n",
|
|
93 "13\n",
|
|
94 "14\n",
|
|
95 "FizzBuzz\n",
|
|
96 "16\n",
|
|
97 "17\n",
|
|
98 "Fizz\n",
|
|
99 "19\n",
|
|
100 "Buzz\n",
|
|
101 "Fizz\n",
|
|
102 "22\n",
|
|
103 "23\n",
|
|
104 "Fizz\n",
|
|
105 "Buzz\n",
|
|
106 "26\n",
|
|
107 "Fizz\n",
|
|
108 "28\n",
|
|
109 "29\n",
|
|
110 "FizzBuzz\n",
|
|
111 "31\n",
|
|
112 "32\n",
|
|
113 "Fizz\n",
|
|
114 "34\n",
|
|
115 "Buzz\n",
|
|
116 "Fizz\n",
|
|
117 "37\n",
|
|
118 "38\n",
|
|
119 "Fizz\n",
|
|
120 "Buzz\n",
|
|
121 "41\n",
|
|
122 "Fizz\n",
|
|
123 "43\n",
|
|
124 "44\n",
|
|
125 "FizzBuzz\n",
|
|
126 "46\n",
|
|
127 "47\n",
|
|
128 "Fizz\n",
|
|
129 "49\n",
|
|
130 "Buzz\n",
|
|
131 "Fizz\n",
|
|
132 "52\n",
|
|
133 "53\n",
|
|
134 "Fizz\n",
|
|
135 "Buzz\n",
|
|
136 "56\n",
|
|
137 "Fizz\n",
|
|
138 "58\n",
|
|
139 "59\n",
|
|
140 "FizzBuzz\n",
|
|
141 "61\n",
|
|
142 "62\n",
|
|
143 "Fizz\n",
|
|
144 "64\n",
|
|
145 "Buzz\n",
|
|
146 "Fizz\n",
|
|
147 "67\n",
|
|
148 "68\n",
|
|
149 "Fizz\n",
|
|
150 "Buzz\n",
|
|
151 "71\n",
|
|
152 "Fizz\n",
|
|
153 "73\n",
|
|
154 "74\n",
|
|
155 "FizzBuzz\n",
|
|
156 "76\n",
|
|
157 "77\n",
|
|
158 "Fizz\n",
|
|
159 "79\n",
|
|
160 "Buzz\n",
|
|
161 "Fizz\n",
|
|
162 "82\n",
|
|
163 "83\n",
|
|
164 "Fizz\n",
|
|
165 "Buzz\n",
|
|
166 "86\n",
|
|
167 "Fizz\n",
|
|
168 "88\n",
|
|
169 "89\n",
|
|
170 "FizzBuzz\n",
|
|
171 "91\n",
|
|
172 "92\n",
|
|
173 "Fizz\n",
|
|
174 "94\n",
|
|
175 "Buzz\n",
|
|
176 "Fizz\n",
|
|
177 "97\n",
|
|
178 "98\n",
|
|
179 "Fizz\n",
|
|
180 "Buzz\n"
|
|
181 ]
|
|
182 }
|
|
183 ],
|
|
184 "source": [
|
|
185 "#define __environment _CbC_environment\n",
|
|
186 "#define __return _CbC_return\n",
|
|
187 "\n",
|
|
188 "#include <stdio.h>\n",
|
|
189 "\n",
|
|
190 "typedef __code(*main_ret_code_t)(int, void *env);\n",
|
|
191 "\n",
|
|
192 "__code fizzbuzz(int n, int max, main_ret_code_t ret, void *env);\n",
|
|
193 "__code fizz(int n, int max, main_ret_code_t ret, void *env);\n",
|
|
194 "__code buzz(int n, int max, const char *fizz, main_ret_code_t ret, void *env);\n",
|
|
195 "__code print_fizzbuzz(int n, int max, const char *fizz, const char *buzz, main_ret_code_t ret, void *env);\n",
|
|
196 "\n",
|
|
197 "int main(void){\n",
|
|
198 " goto fizzbuzz(1, 100, __return, __environment);\n",
|
|
199 "}\n",
|
|
200 "\n",
|
|
201 "__code fizzbuzz(int n, int max, main_ret_code_t ret, void *env) {\n",
|
|
202 " if (n > max) goto ret(0, env);\n",
|
|
203 "\n",
|
|
204 " goto fizz(n, max, ret, env);\n",
|
|
205 "}\n",
|
|
206 "\n",
|
|
207 "__code fizz(int n, int max, main_ret_code_t ret, void *env) {\n",
|
|
208 " if (n % 3 == 0) {\n",
|
|
209 " goto buzz(n, max, \"Fizz\", ret, env);\n",
|
|
210 " } else {\n",
|
|
211 " goto buzz(n, max, \"\", ret, env);\n",
|
|
212 " }\n",
|
|
213 "}\n",
|
|
214 "\n",
|
|
215 "__code buzz(int n, int max, const char *fizz, main_ret_code_t ret, void *env) {\n",
|
|
216 " if (n % 5 == 0) {\n",
|
|
217 " goto print_fizzbuzz(n, max, fizz, \"Buzz\", ret, env);\n",
|
|
218 " } else {\n",
|
|
219 " goto print_fizzbuzz(n, max, fizz, \"\", ret, env);\n",
|
|
220 " }\n",
|
|
221 "}\n",
|
|
222 "\n",
|
|
223 "__code print_fizzbuzz(int n, int max, const char *fizz, const char *buzz, main_ret_code_t ret, void *env) {\n",
|
|
224 " if (*fizz || *buzz) {\n",
|
|
225 " printf(\"%s%s\\n\", fizz, buzz);\n",
|
|
226 " } else {\n",
|
|
227 " printf(\"%d\\n\", n);\n",
|
|
228 " }\n",
|
|
229 "\n",
|
|
230 " goto fizzbuzz(n + 1, max, ret, env);\n",
|
|
231 "}"
|
|
232 ]
|
|
233 },
|
|
234 {
|
|
235 "cell_type": "code",
|
|
236 "execution_count": null,
|
|
237 "metadata": {},
|
|
238 "outputs": [],
|
|
239 "source": []
|
|
240 }
|
|
241 ],
|
|
242 "metadata": {
|
|
243 "kernelspec": {
|
|
244 "display_name": "CbC",
|
|
245 "language": "CbC",
|
|
246 "name": "cbc"
|
|
247 },
|
|
248 "language_info": {
|
|
249 "file_extension": ".c",
|
|
250 "mimetype": "text/plain",
|
|
251 "name": "C"
|
|
252 }
|
|
253 },
|
|
254 "nbformat": 4,
|
|
255 "nbformat_minor": 2
|
|
256 }
|