From 692d13cc1a6fda2776d0ad0b34e9fbff0bc2c55c Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Sun, 21 Jun 2020 17:47:55 -0400 Subject: everything now working with blocks not returning values --- docs/00.md | 59 ----------------------------------------------------------- docs/01.md | 18 ------------------ docs/docs.css | 11 +++++++++++ 3 files changed, 11 insertions(+), 77 deletions(-) delete mode 100644 docs/00.md delete mode 100644 docs/01.md create mode 100644 docs/docs.css (limited to 'docs') diff --git a/docs/00.md b/docs/00.md deleted file mode 100644 index 4998684..0000000 --- a/docs/00.md +++ /dev/null @@ -1,59 +0,0 @@ -## Declarations - -In toc, declarations have the following syntax: -``` - :[:] [type] [= expression]; -``` - -The square brackets (`[]`) indicate something optional. - -All of the following statements -declare an new variable `x` which is an integer, and has a value of 0: -``` -x : int; -x : int = 0; -x := 0; -``` -Note that in the first of those statements, although no expression -is specified, it defaults to 0. This is not true in C, -and there will eventually probably be an option to -leave `x` uninitialized. - -If you wanted x to be a floating-point number, you could use: -``` -x : float; -x : float = 0; -x := 0.0; -``` - -Note that `0` can be used as both a `float` and an `int`eger, but -when no type is specified, it defaults to an `int`, whereas `0.0` -defaults to a `float`. - -Here are all of toc's builtin types and their ranges of values: - -- `int` - A 64-bit signed integer (always), -9223372036854775808 to 9223372036854775807 -- `i8` - An 8-bit signed integer, -128 to 128 -- `i16` - 16-bit signed integer, -32768 to 32767 -- `i32` - 32-bit signed integer, -2147483648 to 2147483647 -- `i64` - 64-bit signed integer (same as `int`, but more explicit about the size), -9223372036854775808 to 9223372036854775807 -- `u8` - An 8-bit unsigned integer, 0 to 255 -- `u16` - 16-bit unsigned integer, 0 to 65535 -- `u32` - 32-bit unsigned integer, 0 to 4294967295 -- `u64` - 64-bit unsigned integer, 0 to 18446744073709551615 -- `float` - A 32-bit floating-point number, -3.40282347e+38 to 3.40282347e+38 -- `f32` - A 32-bit floating-point number (same as `float`, but more explicit about the size) -- `f64` - A 64-bit floating-point number, -1.7976931348623157e+308 to 1.7976931348623157e+308 -- `bool` - A boolean value, either `false` or `true`. -- `char` - A character. The specific values are technically platform-dependent, but usually there are 256 of them. - -At the moment, it is not technically guaranteed that `f32`/`float` is actually 32-bit and that `f64` is actually 64-bit; they are platform dependent. Perhaps someday there will be a version of toc which does not compile to C, where that could be guaranteed. - -To make declarations constant, use `::` instead of `:`. e.g. - -``` -x ::= 5+3; -y :: float = 5.123; -``` - -Here, "constant" means constant at compile time, not read-only as it does in C. One interesting thing about toc is that normal functions can run at compile time, so pretty much any expression is a valid initializer for a constant, e.g. doing `x ::= some_function();` runs `some_function` at compile time, not at run time. diff --git a/docs/01.md b/docs/01.md deleted file mode 100644 index 816f3e6..0000000 --- a/docs/01.md +++ /dev/null @@ -1,18 +0,0 @@ -### A first program - -The `main` function in toc corresponds to the `main` function in C. This function is called when your program is run. So, this is a valid toc program which does nothing: - -``` -main ::= fn() { -}; -``` - -It declares a constant, `main`, which is a function with an empty body. Note that the syntax for declaring functions is the same as the syntax for declaring constants (it isn't something like `fn main() { ... }`). - -Assuming you have compiled the compiler (see `README.md` for instructions about that), you can compile it with - -``` -toc -``` - -You will get a file called `out.c`, which you can then put through your C compiler to get an executable file which does nothing. Congratulations! You've written your first toc program. diff --git a/docs/docs.css b/docs/docs.css new file mode 100644 index 0000000..98871a2 --- /dev/null +++ b/docs/docs.css @@ -0,0 +1,11 @@ +body { + font-family: sans-serif; +} +c { + font-family: monospace; +} +a, a:visited { + text-decoration: none; + color: #038083; +} + -- cgit v1.2.3