From ac6e0671373351c07ee05e5217108a636cb707cc Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Sun, 21 Jun 2020 17:53:59 -0400 Subject: oops gitignore was ignoring docs --- .gitignore | 2 -- docs/00.html | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ docs/01.html | 31 ++++++++++++++++++++++++ docs/contents.html | 16 ++++++++++++ 4 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 docs/00.html create mode 100644 docs/01.html create mode 100644 docs/contents.html diff --git a/.gitignore b/.gitignore index 2d2c79d..c5f345e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,6 @@ tags std/*.c std/*.o *.so -README.html -docs/*.html *.dll *.exp *.lib diff --git a/docs/00.html b/docs/00.html new file mode 100644 index 0000000..b32be13 --- /dev/null +++ b/docs/00.html @@ -0,0 +1,71 @@ + + + + +Declarations + + +

Declarations

+ +

Table of contents · Next

+ +Variable declarations have the following syntax: +
+<name> :[:] [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. +

+ +

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 integer, but +when no type is specified, it defaults to an int, whereas 0.0 +defaults to a float.

+ +

Here are all of toc's basic builtin types and their ranges of values:

+ + + +

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.html b/docs/01.html new file mode 100644 index 0000000..f520805 --- /dev/null +++ b/docs/01.html @@ -0,0 +1,31 @@ + + + + +A first program + + +

A first program

+ +

Table of contents · Prev

+ +

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() { ... }).

+ +

Note that you do not need a semicolon at the end of this declaration (for convenience, if a declaration ends with a closing brace (}), you do not need a semicolon).

+ +

Assuming you have compiled the compiler (see README.md for instructions about that), you can compile it with

+ +
+toc <your filename>
+
+ +

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/contents.html b/docs/contents.html new file mode 100644 index 0000000..d5afb65 --- /dev/null +++ b/docs/contents.html @@ -0,0 +1,16 @@ + + + + +Contents + + +

Contents

+ + + + + -- cgit v1.2.3