view Example.ipynb @ 92:9cde0dc0699e default tip

fix README.md
author aka
date Wed, 27 Jun 2018 00:10:30 +0900
parents
children
line wrap: on
line source

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CbC kernel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hello CbC!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hello CbC!\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[CbC kernel] Executable exited with code 11"
     ]
    }
   ],
   "source": [
    "#define __environment _CbC_environment\n",
    "#define __return _CbC_return\n",
    "\n",
    "extern int printf(const char*, ...);\n",
    "\n",
    "__code Hello_CbC();\n",
    "\n",
    "int main(int argc, char **argv){\n",
    "    goto Hello_CbC();\n",
    "    return 0;\n",
    "}\n",
    "\n",
    "__code Hello_CbC(){\n",
    "    printf(\"Hello CbC!\\n\");\n",
    "    \n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## fizzbazz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://gist.github.com/hanachin/3e2f9034e0fe382f019e55de4c6b016b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2\n",
      "Fizz\n",
      "4\n",
      "Buzz\n",
      "Fizz\n",
      "7\n",
      "8\n",
      "Fizz\n",
      "Buzz\n",
      "11\n",
      "Fizz\n",
      "13\n",
      "14\n",
      "FizzBuzz\n",
      "16\n",
      "17\n",
      "Fizz\n",
      "19\n",
      "Buzz\n",
      "Fizz\n",
      "22\n",
      "23\n",
      "Fizz\n",
      "Buzz\n",
      "26\n",
      "Fizz\n",
      "28\n",
      "29\n",
      "FizzBuzz\n",
      "31\n",
      "32\n",
      "Fizz\n",
      "34\n",
      "Buzz\n",
      "Fizz\n",
      "37\n",
      "38\n",
      "Fizz\n",
      "Buzz\n",
      "41\n",
      "Fizz\n",
      "43\n",
      "44\n",
      "FizzBuzz\n",
      "46\n",
      "47\n",
      "Fizz\n",
      "49\n",
      "Buzz\n",
      "Fizz\n",
      "52\n",
      "53\n",
      "Fizz\n",
      "Buzz\n",
      "56\n",
      "Fizz\n",
      "58\n",
      "59\n",
      "FizzBuzz\n",
      "61\n",
      "62\n",
      "Fizz\n",
      "64\n",
      "Buzz\n",
      "Fizz\n",
      "67\n",
      "68\n",
      "Fizz\n",
      "Buzz\n",
      "71\n",
      "Fizz\n",
      "73\n",
      "74\n",
      "FizzBuzz\n",
      "76\n",
      "77\n",
      "Fizz\n",
      "79\n",
      "Buzz\n",
      "Fizz\n",
      "82\n",
      "83\n",
      "Fizz\n",
      "Buzz\n",
      "86\n",
      "Fizz\n",
      "88\n",
      "89\n",
      "FizzBuzz\n",
      "91\n",
      "92\n",
      "Fizz\n",
      "94\n",
      "Buzz\n",
      "Fizz\n",
      "97\n",
      "98\n",
      "Fizz\n",
      "Buzz\n"
     ]
    }
   ],
   "source": [
    "#define __environment _CbC_environment\n",
    "#define __return _CbC_return\n",
    "\n",
    "#include <stdio.h>\n",
    "\n",
    "typedef __code(*main_ret_code_t)(int, void *env);\n",
    "\n",
    "__code fizzbuzz(int n, int max, main_ret_code_t ret, void *env);\n",
    "__code fizz(int n, int max, main_ret_code_t ret, void *env);\n",
    "__code buzz(int n, int max, const char *fizz, main_ret_code_t ret, void *env);\n",
    "__code print_fizzbuzz(int n, int max, const char *fizz, const char *buzz, main_ret_code_t ret, void *env);\n",
    "\n",
    "int main(void){\n",
    "  goto fizzbuzz(1, 100, __return, __environment);\n",
    "}\n",
    "\n",
    "__code fizzbuzz(int n, int max, main_ret_code_t ret, void *env) {\n",
    "  if (n > max) goto ret(0, env);\n",
    "\n",
    "  goto fizz(n, max, ret, env);\n",
    "}\n",
    "\n",
    "__code fizz(int n, int max, main_ret_code_t ret, void *env) {\n",
    "  if (n % 3 == 0) {\n",
    "    goto buzz(n, max, \"Fizz\", ret, env);\n",
    "  } else {\n",
    "    goto buzz(n, max, \"\", ret, env);\n",
    "  }\n",
    "}\n",
    "\n",
    "__code buzz(int n, int max, const char *fizz, main_ret_code_t ret, void *env) {\n",
    "  if (n % 5 == 0) {\n",
    "    goto print_fizzbuzz(n, max, fizz, \"Buzz\", ret, env);\n",
    "  } else {\n",
    "    goto print_fizzbuzz(n, max, fizz, \"\", ret, env);\n",
    "  }\n",
    "}\n",
    "\n",
    "__code print_fizzbuzz(int n, int max, const char *fizz, const char *buzz, main_ret_code_t ret, void *env) {\n",
    "  if (*fizz || *buzz) {\n",
    "    printf(\"%s%s\\n\", fizz, buzz);\n",
    "  } else {\n",
    "    printf(\"%d\\n\", n);\n",
    "  }\n",
    "\n",
    "  goto fizzbuzz(n + 1, max, ret, env);\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "CbC",
   "language": "CbC",
   "name": "cbc"
  },
  "language_info": {
   "file_extension": ".c",
   "mimetype": "text/plain",
   "name": "C"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}