From e85d35543a2bacd7ccf0abbde73775e52065b430 Mon Sep 17 00:00:00 2001 From: Toshio Sekiya Date: Sun, 7 Mar 2021 00:19:29 +0900 Subject: [PATCH] Add sec23. --- gfm/sec23.md | 1847 +++++++++++++++++++++++++++++--- gfm/sec6.md | 2 +- gfm/sec9.md | 2 +- image/proc_call.png | Bin 0 -> 24009 bytes image/proc_call.xcf | Bin 0 -> 46568 bytes image/stack.png | Bin 0 -> 31034 bytes image/stack.xcf | Bin 0 -> 67089 bytes image/table.png | Bin 0 -> 21679 bytes image/table.xcf | Bin 0 -> 39630 bytes image/transformation.png | Bin 0 -> 10607 bytes image/tree.png | Bin 0 -> 15265 bytes image/tree.xcf | Bin 0 -> 37335 bytes image/tree2.png | Bin 0 -> 66241 bytes image/tree2.xcf | Bin 0 -> 92749 bytes image/turtle_parser_tree.png | Bin 23978 -> 33296 bytes image/turtle_parser_tree.xcf | Bin 49799 -> 49581 bytes src/sec23.src.md | 1128 +++++++++++++++++-- src/turtle/example/tree2.txt | 4 + src/turtle/turtle.h | 2 +- src/turtle/turtle.y | 83 +- src/turtle/turtleapplication.c | 4 - 21 files changed, 2777 insertions(+), 295 deletions(-) create mode 100644 image/proc_call.png create mode 100644 image/proc_call.xcf create mode 100644 image/stack.png create mode 100644 image/stack.xcf create mode 100644 image/table.png create mode 100644 image/table.xcf create mode 100644 image/transformation.png create mode 100644 image/tree.png create mode 100644 image/tree.xcf create mode 100644 image/tree2.png create mode 100644 image/tree2.xcf diff --git a/gfm/sec23.md b/gfm/sec23.md index 8bcaa4d..700b4ee 100644 --- a/gfm/sec23.md +++ b/gfm/sec23.md @@ -6,12 +6,12 @@ A program `turtle` is an example with the combination of TfeTextView and GtkDraw It is a very small interpreter but it provides a way to draw fractal curves. The following diagram is a Koch curve, which is a famous example of fractal curves. -![Kocho curve](../src/turtle/image/turtle_koch.png) +![Koch curve](../src/turtle/image/turtle_koch.png) This program uses flex and bison. Flex is a lexical analyzer. Bison is a parser generator. -These two programs are similar to lex and yacc which are proprietary software developed in Bell Laboratry. +These two programs are similar to lex and yacc which are proprietary software developed in Bell Laboratory. However, flex and bison are open source software. I will write about how to use those software, but they are not topics about gtk. So, readers can skip that part of this sections. @@ -43,7 +43,7 @@ The side of the square is 100 pixels long. In the same way, you can draw other curves. The documentation above shows some fractal curves such as tree, snow and square-koch. The source code in turtle language is located at [src/turtle/example](../src/turtle/example) directory. -You can read these files by clicking on the `Open` button. +You can read these files into `turtle` editor by clicking on the `Open` button. ## Combination of TfeTextView and GtkDrawingArea objects @@ -73,47 +73,42 @@ So the handler of "clicked" signal of the `Run` button prevents from reentering. 16 contents = gtk_text_buffer_get_text (tb, &start_iter, &end_iter, FALSE); 17 if (surface) { 18 init_flex (contents); -19 init_parse (); -20 stat = yyparse (); -21 #ifdef debug -22 g_print ("yyparse returned %d.\n", stat); -23 #endif -24 if (stat == 0) /* No error */ { -25 run (); -26 } -27 finalize_flex (); -28 } -29 gtk_widget_queue_draw (GTK_WIDGET (da)); -30 busy = FALSE; -31 } -32 -33 static void -34 resize_cb (GtkDrawingArea *drawing_area, int width, int height, gpointer user_data) { -35 if (surface) -36 cairo_surface_destroy (surface); -37 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); -38 } +19 stat = yyparse (); +20 if (stat == 0) /* No error */ { +21 run (); +22 } +23 finalize_flex (); +24 } +25 gtk_widget_queue_draw (GTK_WIDGET (da)); +26 busy = FALSE; +27 } +28 +29 static void +30 resize_cb (GtkDrawingArea *drawing_area, int width, int height, gpointer user_data) { +31 if (surface) +32 cairo_surface_destroy (surface); +33 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); +34 } ~~~ - 8-13: The static value `busy` holds a status of the interpreter. If it is `TRUE`, the interpreter is running and it is not possible to call the interpreter again because it's not a re-entrant program. If it is `FALSE`, it is safe to call the interpreter. -- 14: Now it is about to call the interpreter so let `busy` variable to be TRUE. +- 14: Now it is about to call the interpreter so changes `busy` to be TRUE. - 15-16: Gets the contents of GtkTextBuffer. -- 17: The varable `surface` is a static variable. +- 17: The variable `surface` is a static variable. It points to a `cairo_surface_t` object. -It is generated when the GtkDrawingArea object is realized and the each time it is resized. +It is generated when the GtkDrawingArea object is realized and whenever it is resized. Therefore, `surface` isn't NULL usually. But if it is NULL, the interpreter won't be called. -- 18-19: Initializes lexcal analyzer, then parser. -- 20: Calls parser. +- 18: Initializes lexical analyzer. +- 19: Calls parser. Parser analyze the program codes syntactically and generate a tree structured data. -- 24-26: If the parser succesfully parsed, it calls `run` which is the interpreter. -`Run` executes the tree-structured program. -- 27: finalize the lexical analyzer. -- 29: Add the drawing area object to the queue to draw. -- 30: The interpreter program has finished so `busy` is now FALSE. -- 33-38: A handler of "resized" signal. +- 20-22: If the parser successfully parsed, it calls `run` (runtime routine). +- 23: finalize the lexical analyzer. +- 25: Add the drawing area object to the queue to draw. +- 26: The interpreter program has finished so `busy` is now FALSE. +- 29-34: A handler of "resized" signal. It generates or regenerates a surface object. Other part of `turtleapplication.c` is almost same as the codes of `colorapplication.c` in the previous section. @@ -122,16 +117,17 @@ The codes of `turtleapplication.c` is in the [turtle directory](../src/turtle). ## What does the interpreter do? Suppose that the turtle runs with the following program. -The following is the description how turtle recognizes the program and does the work. ~~~ distance = 100 fd distance*2 ~~~ +The turtle recognizes the program above and works as follows. + - Generally, a program consists of tokens. Tokens are "distance", "=", "100", "fd", "*" and "2" in the above example.. -- The interpreter `turtle` calls `yylex` to read a token in the source file. +- The parser calls `yylex` to read a token in the source file. The `yylex` returns a code which is called "token kind" and sets a global variable `yylval` with a value, which is called a semantic value. The type of `yylval` is union and `yylval.ID` is string and `yylval.NUM` is double. There are seven tokens in the program so `yylex` is called seven times. @@ -146,21 +142,23 @@ There are seven tokens in the program so `yylex` is called seven times. | 6 | * | | | | 7 | NUM | | 2 | -`yylex` returns a token kind every time, but it doesn't set `yylval.ID` or `yylval.NUM` every time. +- `yylex` returns a token kind every time, but it doesn't set `yylval.ID` or `yylval.NUM` every time. It is because keywords (`FD`) and symbols (`=` and `*`) don't have any semantic values. The function `yylex` is called lexical analyzer or scanner. - `turtle` makes a tree structured data. This part of `turtle` is called parser. -![turtle parser tree](../src/turtle_parser_tree_png) +![turtle parser tree](../image/turtle_parser_tree.png) - `turtle` analyzes the tree and executes it. This part of `turtle` is called runtime routine. -The tree consists of line segments and rectangles between line segments. +The tree consists of rectangles and line segments between the rectangles. The rectangles are called nodes. For example, N\_PROGRAM, N\_ASSIGN, N\_FD and N\_MUL are nodes. 1. Goes down from N\_PROGRAM to N\_ASSIGN. - 2. At N_ASSIGN node, `turtle` checks if the first child is ID, that means the left side is a variable. + 2. N_ASSIGN node has two children, ID and NUM. +This node comes from "distance = 100" which is "ID = NUM" syntactically. +First, `turtle` checks if the first child is ID. If it's ID, then `turtle` looks for the variable in the variable table. If it doesn't exist, it registers the ID (`distance`) to the table. Then go back to the N\_ASSIGN node. @@ -171,47 +169,48 @@ Saves 100 to the variable table at the `distance` record. It has only one child. Goes down to the child N\_MUL. 5. The first child is ID (distance). -Looks for the varable distance in the variable table and gets the value 100. +Searches the variable table for the variable `distance` and gets the value 100. The second child is a number 2. Multiplies 100 by 2 and gets 200. Then `turtle` goes back to N_FD. 6. Now `turtle` knows the distance is 200. -It moves the cursor forward by 200. +It moves the cursor forward by 200 pixels. 8. There are no node follows. Runtime routine returns to the main routine. --`turtle` draws GtkDrawingArea then stops. -Actually most programs are more complicated than the example above. +- `turtle` draws a segment on GtkDrawingArea then stops. + +Most turtle programs are more complicated than the example above. So, `turtle` does much more work to interpret programs. However, basically it works by the same way above. -Interpritation consists of three parts. +Interpretation consists of three parts. - Lexical analysis - Syntax Parsing and tree generation -- Execution by the tree +- Interpret the tree and execute commands. ## Compilation flow The source files are: -- flex source file ~> turtle.lex -- bison source file => turtle.y -- C header file => turtle.h, turtle_lex.h -- C source file => turtleapplication.c -- other files => turtle.ui, turtle.gresources.xml, meson.build +- flex source file => `turtle.lex` +- bison source file => `turtle.y` +- C header file => `turtle.h`, `turtle_lex.h` +- C source file => `turtleapplication.c` +- other files => `turtle.ui`, `turtle.gresources.xml` and `meson.build` The compilation process is a bit complicated. 1. glib-compile-resources compiles `turtle.ui` to `resources.c` according to `turtle.gresource.xml`. It also generates `resources.h`. -2. bison compiles `turtle.y` to `turtle\_parser.c` and generates `turtle\_parser.h` -3. flex compiles `turtle.lex` to `turtle\_lex.c`. -4. gcc compiles `application.c`, `resources.c`, `turtle\_parser.c` and `turtle\_lex.c` with `turtle.h`, `resources.h` and `turtle\_parser.h`. +2. bison compiles `turtle.y` to `turtle_parser.c` and generates `turtle_parser.h` +3. flex compiles `turtle.lex` to `turtle_lex.c`. +4. gcc compiles `application.c`, `resources.c`, `turtle_parser.c` and `turtle_lex.c` with `turtle.h`, `turtle_lex.h`, `resources.h` and `turtle_parser.h`. It generates an executable file `turtle`. ![compile process](../image/turtle_compile_process.png) -Meson controls the process and the instruction is described in meson.build. +Meson controls the process and the instruction is described in `meson.build`. ~~~meson 1 project('turtle', 'c') @@ -238,9 +237,9 @@ Meson controls the process and the instruction is described in meson.build. - 3: Gets C compiler. It is usually `gcc` in linux. - 4: Gets math library. -This program uses trigonometry functions. +This program uses trigonometric functions. They are defined in the math library, but the library is optional. -So, it is necessary to include the library by `#include ` and also link the library with the linker. +So, it is necessary to include it by `#include ` and also link the library with the linker. - 6: Gets gtk4 library. - 8: Gets gnome module. Module is a system provided by meson. @@ -249,26 +248,23 @@ See [Meson build system website](https://mesonbuild.com/Gnome-module.html#gnome- - 11: Gets flex. - 12: Gets bison. - 13: Compiles `turtle.y` to `turtle_parser.c` and `turtle_parser.h` by bison. -The function `custom_target`creates a custom top level target. +The function `custom_target` creates a custom top level target. See [Meson build system website](https://mesonbuild.com/Reference-manual.html#custom_target) for further information. - 14: Compiles `turtle.lex` to `turtle_lex.c` by flex. -- 16: Specifies C surce files. -- 18: Compiles C source files including generated files by glib^compile-resources, bison and flex. -The argument `turtleparser[1]` refers to `tirtle_parser.h` which is the secound output in the line 13. +- 16: Specifies C source files. +- 18: Compiles C source files including generated files by glib-compile-resources, bison and flex. +The argument `turtleparser[1]` refers to `tirtle_parser.h` which is the second output in the line 13. ## Turtle.lex -This subsection and the following subsection are description about flex and bison. -If you want to focus on gtk4, you can skip these subsections. - ### What does flex do? -Flex creates lexical analizer from flex source file. +Flex creates lexical analyzer from flex source file. Flex source file is a text file and its syntactic rule will be explained later. Generated lexical analyzer is a C source file. It is also called scanner. It reads a text file, which is a source file of a program language, and gets variable names, numbers and symbols. -Suppose here is a text file. +Suppose here is a turtle source file. ~~~ fc (1,0,0) # Foreground color is red, rgb = (1,0,0). @@ -279,102 +275,1655 @@ fd distance # Go forward by distance (100) pixels. tr angle # Turn right by angle (90) degrees. ~~~ -The content of the textfile is separated into `fc`, `(`, `1`, `,` and so on. -The words `fc`, `pd`, `distance` and `100` are called token. -The characters `(`, `<` and `=` are called symbol. -( Sometimes those symbols called token, too.) +The content of the text file is separated into `fc`, `(`, `1` and so on. +The words `fc`, `pd`, `distance`, `angle`, `tr`, `1`, `0`, `100` and `90` are called tokens. +The characters '`(`' (left parenthesis), '`,`' (comma), '`)`' (right parenthesis) and '`=`' (equal sign) are called symbols. +( Sometimes those symbols called tokens, too.) -A scanner has `yylex` function and `yytext` variable. -The function returns a type of token and set `yytext` to contain the name of the token. -Each time `yylexc` is called, it returns the followings. - - -Turtle.lex isn't so big program. +Flex reads `turtle.lex` and generates a scanner. +The file `turtle.lex` specifies tokens, symbols and the behavior which corresponds to each token or symbol. +Turtle.lex isn't a big program. ~~~lex 1 %top{ - 2 #include - 3 #include "turtle.h" - 4 - 5 static int nline = 1; - 6 static int ncolumn = 1; - 7 static void get_location (char *text); - 8 - 9 /* Dinamically allocated memories are added to the single list. They will be freed in the finalize function. */ -10 extern GSList *list; -11 } -12 -13 %option noyywrap -14 -15 DIGIT [0-9] + 2 #include + 3 #include + 4 #include "turtle.h" + 5 + 6 static int nline = 1; + 7 static int ncolumn = 1; + 8 static void get_location (char *text); + 9 +10 /* Dinamically allocated memories are added to the single list. They will be freed in the finalize function. */ +11 extern GSList *list; +12 } +13 +14 %option noyywrap +15 16 REAL_NUMBER (0|[1-9][0-9]*)(\.[0-9]+)? 17 IDENTIFIER [a-zA-Z][a-zA-Z0-9]* 18 %% 19 /* rules */ -20 #.*\n nline++; ncolumn = 1; /* comment */ -21 #.* ; /* comment in the last line */ -22 [ ] ncolumn++; -23 \t ncolumn += 8; /* assume that tab is 8 spaces. */ -24 \n nline++; ncolumn = 1; -25 /* reserved keywords */ -26 pu get_location (yytext); return PU; /* pen up */ -27 pd get_location (yytext); return PD; /* pen down */ -28 pw get_location (yytext); return PW; /* pen width = line width */ -29 fd get_location (yytext); return FD; /* forward */ -30 tr get_location (yytext); return TR; /* turn right */ -31 bc get_location (yytext); return BC; /* background color */ -32 fc get_location (yytext); return FC; /* foreground color */ -33 dp get_location (yytext); return DP; /* define procedure */ -34 if get_location (yytext); return IF; /* if statement */ -35 rt get_location (yytext); return RT; /* return statement */ -36 rs get_location (yytext); return RS; /* reset the status */ -37 /* constant */ -38 {REAL_NUMBER} get_location (yytext); yylval.NUM = atof (yytext); return NUM; -39 /* identifier */ -40 {IDENTIFIER} { get_location (yytext); yylval.ID = g_strdup(yytext); -41 list = g_slist_prepend (list, yylval.ID); -42 return ID; -43 } -44 "=" get_location (yytext); return '='; -45 ">" get_location (yytext); return '>'; -46 "<" get_location (yytext); return '<'; -47 "+" get_location (yytext); return '+'; -48 "-" get_location (yytext); return '-'; -49 "*" get_location (yytext); return '*'; -50 "/" get_location (yytext); return '/'; -51 "(" get_location (yytext); return '('; -52 ")" get_location (yytext); return ')'; -53 "{" get_location (yytext); return '{'; -54 "}" get_location (yytext); return '}'; -55 "," get_location (yytext); return ','; -56 . ncolumn++; return YYUNDEF; -57 %% -58 -59 static void -60 get_location (char *text) { -61 yylloc.first_line = yylloc.last_line = nline; -62 yylloc.first_column = ncolumn; -63 yylloc.last_column = (ncolumn += strlen(text)) - 1; -64 } -65 -66 static YY_BUFFER_STATE state; -67 -68 void -69 init_flex (const char *text) { -70 state = yy_scan_string (text); -71 } -72 -73 void -74 finalize_flex (void) { -75 yy_delete_buffer (state); -76 } -77 +20 #.* ; /* comment. Be careful. Dot symbol (.) matches any character but new line. */ +21 [ ] ncolumn++; +22 \t ncolumn += 8; /* assume that tab is 8 spaces. */ +23 \n nline++; ncolumn = 1; +24 /* reserved keywords */ +25 pu get_location (yytext); return PU; /* pen up */ +26 pd get_location (yytext); return PD; /* pen down */ +27 pw get_location (yytext); return PW; /* pen width = line width */ +28 fd get_location (yytext); return FD; /* forward */ +29 tr get_location (yytext); return TR; /* turn right */ +30 bc get_location (yytext); return BC; /* background color */ +31 fc get_location (yytext); return FC; /* foreground color */ +32 dp get_location (yytext); return DP; /* define procedure */ +33 if get_location (yytext); return IF; /* if statement */ +34 rt get_location (yytext); return RT; /* return statement */ +35 rs get_location (yytext); return RS; /* reset the status */ +36 /* constant */ +37 {REAL_NUMBER} get_location (yytext); yylval.NUM = atof (yytext); return NUM; +38 /* identifier */ +39 {IDENTIFIER} { get_location (yytext); yylval.ID = g_strdup(yytext); +40 list = g_slist_prepend (list, yylval.ID); +41 return ID; +42 } +43 "=" get_location (yytext); return '='; +44 ">" get_location (yytext); return '>'; +45 "<" get_location (yytext); return '<'; +46 "+" get_location (yytext); return '+'; +47 "-" get_location (yytext); return '-'; +48 "*" get_location (yytext); return '*'; +49 "/" get_location (yytext); return '/'; +50 "(" get_location (yytext); return '('; +51 ")" get_location (yytext); return ')'; +52 "{" get_location (yytext); return '{'; +53 "}" get_location (yytext); return '}'; +54 "," get_location (yytext); return ','; +55 . ncolumn++; return YYUNDEF; +56 %% +57 +58 static void +59 get_location (char *text) { +60 yylloc.first_line = yylloc.last_line = nline; +61 yylloc.first_column = ncolumn; +62 yylloc.last_column = (ncolumn += strlen(text)) - 1; +63 } +64 +65 static YY_BUFFER_STATE state; +66 +67 void +68 init_flex (const char *text) { +69 state = yy_scan_string (text); +70 } +71 +72 void +73 finalize_flex (void) { +74 yy_delete_buffer (state); +75 } +76 ~~~ +The file consists of three sections which are separated by "%%" (line 18 and 56). +They are definitions, rules and user code sections. +### Definitions section +First, look at the definitions section. -## Turtle.y source file compiled by bison +- 1-12: Lines between "%top{" and "}" are C source codes. +They will be copied to the top of the generated C source file. +- 2-3: The function `strlen`, in line 62, is defined in `string.h` +The function `atof`, in line 37, is defined in `stdlib.h`. +- 6-8: The current input position is pointed by `nline` and `ncolumn`. +The function `get_location` (line 58-63) sets `yylloc`to point the start and end point of `yytext` in the buffer. +This function is declared here so that it can be called before the function is defined. +- 11: GSlist is used to keep allocated memories. +- 14: This option (`%option noyywrap`) must be specified when you have only single source file to the scanner. Refer to "9 The Generated Scanner" in the flex documentation in your distribution for further information. +(The documentation is not on the internet.) +- 16-17: `REAL_NUMBER` and `IDENTIFIER` are names. +A name begins with a letter or an underscore followed by zero or more letters, digits, underscores (`_`) or dashes (`-`). +They are followed by regular expressions which are their definition. +They will be used in rules section and will expand to the definition. +You can leave out such definitions here and use regular expressions in rules section directly. + +### Rules section + +This section is the most important part. +Rules consist of patterns and actions. +For example, line 37 is a rule. + +- `{REAL_NUMBER}` is a pattern +- `get_location (yytext); yylval.NUM = atof (yytext); return NUM;` is an action. + +`{REAL_NUMBER}` is defined in the 16th line, so it expands to `(0|[1-9][0-9]*)(\.[0-9]+)?`. +This regular expression matches numbers like `0`, `12` and `1.5`. +If the input is a number, it matches the pattern in line 37. +Then the matched text is assigned to `yytext` and corresponding action is executed. +A function `get_location` changes the location variables. +It assigns `atof (yytext)`, which is double sized number converted from `yytext`, to `yylval.NUM` and return `NUM`. +`NUM` is an integer defined by `turtle.y`. + +The scanner generated by flex and C compiler has `yylex` function. +If `yylex` is called and the input is "123.4", then it works as follows. + +1. A string "123.4" matches `{REAL_NUMBER}`. +2. Update the location variable `ncolumn` and `yylloc`. +3. `atof` converts the string "123.4" to double sized floating point number 123.4. +4. It is assigned to `yylval.NUM`. +5. `yylex` returns `NUM` to the caller. + +Then the caller knows the input is `NUM` (number), and its value is 123.4. + +- 19-55: Rules section. +- 20: Comment begins `#` followed by any characters except newline. +No action happens. +- 21: White space just increases a variable `ncolumn` by one. +- 22: Tab is assumed to be equal to eight spaces. +- 23: New line increases a variable `nline` by one and resets `ncolumn`. +- 25-35: Keywords just updates the location variables `ncolumn` and `yylloc`, and return the codes of the keywords. +- 37: Real number constant. +- 38: Identifier is defined in line 17. +It begins alphabet followed by zero or more alphabet or digit. +The location variables are updated and the name of the identifier is assigned to `yylval.ID`. +The memory of the name is allocated by the function `g_strdup`. +The memory is registered to the list (GSlist type list). +The memory will be freed after the runtime routine finishes. +Returns `ID`. +- 43-54: Symbols just update the location variable and return the codes. +The code is the same as the symbol itself. +- 55: If the input doesn't match above patterns, then it is error. +Returns `YYUNDEF`. + +### User code section + +This section is just copied to C source file. + +- 58-63: A function `get_location`. +The location of the input is recorded to `nline` and `ncolumn`. +These two variables are for the scanner. +A variable `yylloc` is shared by the scanner and the parser. +It is a C structure and has four members, `first_line`, `first_column`, `last_line` and `last_column`. +They point the start and end of the current input text. +- 65: `YY_BUFFER_STATE` is a type of the pointer points the input buffer. +- 67-70: `init_flex` is called by `run_cb` signal handler, which is called when `Run` button is clicked on. +`run_cb` calls `init_flex` with one argument which is the copy of the content of GtkTextBuffer. +`yy_scan_string` sets the input buffer to read from the text. +- 72-75: `finalize_flex` is called after runtime routine finishes. +It deletes the input buffer. + +## Turtle.y + +Turtle.y has more than 800 lines so it is difficult to explain all the source code. +So I will explain the key points and leave out other less important parts. + +### What does bison do? + +Bison creates C source file from bison source file. +Bison source file is a text file. +A parser analyzes a program source code according to its grammar. +Suppose here is a turtle source file. + +~~~ +fc (1,0,0) # Foreground color is red, rgb = (1,0,0). +pd # Pen down. +distance = 100 +angle = 90 +fd distance # Go forward by distance (100) pixels. +tr angle # Turn right by angle (90) degrees. +~~~ + +The parser calls `yylex` to get a token. +The token consists of its type (token kind) and value (semantic value). +So, the parser gets items in the following table whenever it calls `yylex`. + +| |token kind|yylval.ID|yylval.NUM| +|:-:|:--------:|:-------:|:--------:| +| 1 | FC | | | +| 2 | ( | | | +| 3 | NUM | | 1.0 | +| 4 | , | | | +| 5 | NUM | | 0.0 | +| 6 | , | | | +| 7 | NUM | | 0.0 | +| 8 | ) | | | +| 9 | PD | | | +|10 | ID |distance | | +|11 | = | | | +|12 | NUM | | 100.0 | +|13 | ID | angle | | +|14 | = | | | +|15 | NUM | | 90.0 | +|16 | FD | | | +|17 | ID |distance | | +|18 | TR | | | +|19 | ID | angle | | + +Bison source code specifies the grammar rules of turtle language. +For example, `fc (1,0,0)` is called primary procedure. +A procedure is like a void type function in C source code. +It doesn't return any values. +Programmers can define their own procedures. +On the other hand, `fc` is a built-in procedure. +Such procedures are called primary procedures. +It is described in Bison source code like: + +~~~ +primary_procedure: FC '(' expression ',' expression ',' expression ')'; +expression: ID | NUM; +~~~ + +This means: + +- Primary procedure is FC followed by '(', expression, ',', expression, ',', expression and ')'. +- expression is ID or NUM. + +The description above is called BNF (Backus-Naur form). +More precisely, it is similar to BNF. + +The first line is: + +~~~ +FC '(' NUM ',' NUM ',' NUM ')'; +~~~ + +You can find this is a primary_procedure easily. +The parser of the turtle language analyzes the turtle source code in the same way. + +The grammar of turtle is described in the [document](../src/turtle/turtle_doc.md). +The following is an extract from the document. + +~~~ +program: + statement +| program statement +; + +statement: + primary_procedure +| procedure_definition +; + +primary_procedure: + PU +| PD +| PW expression +| FD expression +| TR expression +| BC '(' expression ',' expression ',' expression ')' +| FC '(' expression ',' expression ',' expression ')' +| ID '=' expression +| IF '(' expression ')' '{' primary_procedure_list '}' +| RT +| RS +| ID '(' ')' +| ID '(' argument_list ')' +; + +procedure_definition: + DP ID '(' ')' '{' primary_procedure_list '}' +| DP ID '(' parameter_list ')' '{' primary_procedure_list '}' +; + +parameter_list: + ID +| parameter_list ',' ID +; + +argument_list: + expression +| argument_list ',' expression +; + +primary_procedure_list: + primary_procedure +| primary_procedure_list primary_procedure +; + +expression: + expression '=' expression +| expression '>' expression +| expression '<' expression +| expression '+' expression +| expression '-' expression +| expression '*' expression +| expression '/' expression +| '-' expression %prec UMINUS +| '(' expression ')' +| ID +| NUM +; +~~~ + +The grammar rule defines `program` first. + +- program is a statement or a program followed by a statement. + +The definition is recursive. + +- `statement` is program. +- `statement statement` is `program statemet`. +Therefore, it is program. +- `statement statement statement` is `program statemet`. +Therefore, it is program. + +You can find that a list of statements is program like this. + +`program` and `statement` aren't tokens. +They don't appear in the input. +They are called non terminal symbols. +On the other hand, tokens are called terminal symbols. +The word "token" used here has wide meaning, it includes tokens and symbols which appear in the input. +Non terminal symbols are often shortened to nterm. + +Let's analyze the program above as bison does. + +| |token kind|yylval.ID|yylval.NUM|parse |S/R| +|:-:|:--------:|:-------:|:--------:|:-----------------------------------|:-:| +| 1 | FC | | |FC | S | +| 2 | ( | | |FC( | S | +| 3 | NUM | | 1.0 |FC(NUM | S | +| | | | |FC(expression | R | +| 4 | , | | |FC(expression, | S | +| 5 | NUM | | 0.0 |FC(expression,NUM | S | +| | | | |FC(expression,expression | R | +| 6 | , | | |FC(expression,expression, | S | +| 7 | NUM | | 0.0 |FC(expression,expression,NUM | S | +| | | | |FC(expression,expression,expression | R | +| 8 | ) | | |FC(expression,expression,expression)| S | +| | | | |primary_procedure | R | +| | | | |statement | R | +| | | | |program | R | +| 9 | PD | | |program PD | S | +| | | | |program primary_procedure | R | +| | | | |program statement | R | +| | | | |program | R | +|10 | ID |distance | |program ID | S | +|11 | = | | |program ID= | S | +|12 | NUM | | 100.0 |program ID=NUM | S | +| | | | |program ID=expression | R | +| | | | |program primary_procedure | R | +| | | | |program statement | R | +| | | | |program | R | +|13 | ID | angle | |program ID | S | +|14 | = | | |program ID= | S | +|15 | NUM | | 90.0 |program ID=NUM | S | +| | | | |program ID=expression | R | +| | | | |program primary_procedure | R | +| | | | |program statement | R | +| | | | |program | R | +|16 | FD | | |program FD | S | +|17 | ID |distance | |program FD ID | S | +| | | | |program FD expression | R | +| | | | |program primary_procedure | R | +| | | | |program statement | R | +| | | | |program | R | +|18 | TR | | |program TR | S | +|19 | ID | angle | |program TR ID | S | +| | | | |program TR expression | R | +| | | | |program primary_procedure | R | +| | | | |program statement | R | +| | | | |program | R | + +The right most column shows shift/reduce. +Shift is appending an input to the buffer. +Reduce is substituting a higher nterm for the pattern in the buffer. +For example, NUM is replaced by expression in the forth row. +This substitution is "reduce". + +Bison repeats shift and reduction until the end of the input. +If the result is reduced to `program`, the input is syntactically valid. +Bison executes an action whenever reduction occurs. +Actions build a tree. +The tree is analyzed and executed by runtime routine later. + +Bison source files are called bison grammar files. +A bison grammar file consists of four sections, prologue, declarations, rules and epilogue. +The format is as follows. + +~~~ +%{ +prologue +%} +declarations +%% +rules +%% +epilogue +~~~ + +### Prologue + +Prologue section consists of C codes and the codes are copied to the parser implementation file. +You can use `%code` directives to qualify the prologue and identifies the purpose explicitly. +The following is an extract from `turtle.y`. + +~~~bison +%code top{ + #include + #include + #include + #include "turtle.h" + + /* error reporting */ + static void yyerror (char const *s) { /* for syntax error */ + g_print ("%s from line %d, column %d to line %d, column %d\n",s, yylloc.first_line, yylloc.first_column, yylloc.last_line, yylloc.last_column); + } + /* Node type */ + enum { + N_PU, + N_PD, + N_PW, + ... ... ... + }; +} +~~~ + +The directive `%code top` copies its contents to the top of the parser implementation file. +It usually includes `#include` directives, declarations of functions and definitions of constants. +A function `yyerror` reports a syntax error and is called by the parser. +Node type identifies a node in the tree. + +Another directive `%code requires` copies its contents to both the parser implementation file and header file. +The header file is read by the scanner C source file and other files. + +~~~bison +%code requires { + int yylex (void); + int yyparse (void); + void run (void); + + /* semantic value type */ + typedef struct _node_t node_t; + struct _node_t { + int type; + union { + struct { + node_t *child1, *child2, *child3; + } child; + char *name; + double value; + } content; + }; +} +~~~ + +- `yylex` is shared by parser implementation file and scanner file. +- `yyparse` and `run` is called by `run_cb` in `turtleapplication.c`. +- `node_t` is the type of the semantic value of nterms. +The header file defines `YYSTYPE`, which is the semantic value type, with all the token and nterm value types. +The following is extracted from the header file. + +~~~ +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ + char * ID; /* ID */ + double NUM; /* NUM */ + node_t * program; /* program */ + node_t * statement; /* statement */ + node_t * primary_procedure; /* primary_procedure */ + node_t * primary_procedure_list; /* primary_procedure_list */ + node_t * procedure_definition; /* procedure_definition */ + node_t * parameter_list; /* parameter_list */ + node_t * argument_list; /* argument_list */ + node_t * expression; /* expression */ +}; +~~~ + +Other useful macros and declarations are put into the `%code` directive. + +~~~ +%code { +/* The following macro is convenient to get the member of the node. */ + #define child1(n) (n)->content.child.child1 + #define child2(n) (n)->content.child.child2 + #define child3(n) (n)->content.child.child3 + #define name(n) (n)->content.name + #define value(n) (n)->content.value + + /* start of nodes */ + static node_t *node_top = NULL; + /* functions to generate trees */ + static node_t *tree1 (int type, node_t *child1, node_t *child2, node_t *child3); + static node_t *tree2 (int type, double value); + static node_t *tree3 (int type, char *name); +} +~~~ + +### Bison declarations + +Bison declarations defines terminal and non-terminal symbols. +It also specifies some directives. + +~~~ +%locations +%define api.value.type union /* YYSTYPE, the type of semantic values, is union of following types */ + /* key words */ +%token PU +%token PD +%token PW +%token FD +%token TR +%token BC +%token FC +%token DP +%token IF +%token RT +%token RS + /* constant */ +%token NUM + /* identirier */ +%token ID + /* non terminal symbol */ +%nterm program +%nterm statement +%nterm primary_procedure +%nterm primary_procedure_list +%nterm procedure_definition +%nterm parameter_list +%nterm argument_list +%nterm expression + /* logical relation symbol */ +%left '=' '<' '>' + /* arithmetic symbol */ +%left '+' '-' +%left '*' '/' +%precedence UMINUS /* unary minus */ +~~~ + +`%locations` directive inserts the location structure into the header file. +It is like this. + +~~~ +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +~~~ + +This type is shared by the scanner file and the parser implementation file. +The error report function `yyerror` uses it so that it can inform the location that error occurs. + +`%define api.value.type union` generates semantic value type with tokens and nterms and inserts it to the header file. +The inserted part is shown in the previous section as the extracts that shows the value type (YYSTYPE). + +`%token` and `%nterm` directives define tokens and non terminal symbols respectively. + +~~~ +%token PU +... ... +%token NUM +~~~ + +These directives define a token `PU` and `NUM`. +The values of token kinds `PU` and `NUM` are defined as an enumeration constant in the header file. + +~~~ + enum yytokentype + { + ... ... ... + PU = 258, /* PU */ + ... ... ... + NUM = 269, /* NUM */ + ... ... ... + }; + typedef enum yytokentype yytoken_kind_t; +~~~ + +In addition, the type of the semantic value of `NUM` is defined as double in the header file because of `` tag. + +~~~ +union YYSTYPE +{ + char * ID; /* ID */ + double NUM; /* NUM */ + ... ... +} +~~~ + +All the nterm symbols have the same type `* node_t` of the semantic value. + +`%left` and `%precedence` directives define the precedence of operation symbols. + +~~~ + /* logical relation symbol */ +%left '=' '<' '>' + /* arithmetic symbol */ +%left '+' '-' +%left '*' '/' +%precedence UMINUS /* unary minus */ +~~~ + +`%left` directive defines the following symbols as left-associated operators. +If an operator `+` is left-associated, then + +~~~ +A + B + C = (A + B) + C +~~~ + +That is, the calculation is carried out the left operator first, then the right operator. +If an operator `*` is right-associated, then: + +~~~ +A * B * C = A * (B * C) +~~~ + +The definition above decides the behavior of the parser. +Addition and multiplication hold associative law so the result of `(A+B)+C` and `A+(B+C)` are equal in terms of mathematics. +However, the parser will be confused if left (or right) associativity is not specified. + +`%left` and `%precedence` directives show the precedence of operators. +Later declared operators have higher precedence than former declared ones. +The declaration above says, for example, + +~~~ +v=w+z*5+7 is the same as v=((w+(z*5))+7) +~~~ + +Be careful. +The operator `=` above is an assignment. +Assignment is not expression in turtle language. +It is primary_procedure. +But if `=` appears in an expression, it is a logical operater, not an assignment. +The logical equal '`=`' usually used in the conditional expression, for example, in `if` statement. + +### Grammar rules + +Grammar rules section defines the syntactic grammar of the language. +It is similar to BNF form. + +~~~ +result: components { action }; +~~~ + +- result is a nterm. +- components are list of tokens or nterms. +- action is C codes. It is executed whenever the components are reduced to the result. +Action can be left out. + +The following is a part of the grammar rule in `turtle.y`. + +~~~ +program: + statement { node_top = $$ = $1; } +; +statement: + primary_procedure +; +primary_procedure: + FD expression { $$ = tree1 (N_FD, $2, NULL, NULL); } +; +expression: + NUM { $$ = tree2 (N_NUM, $1); } +; +~~~ + +- `program` is `statement`. +- Whenever `statement` is reduced to `program`, an action `node_top=$$=$1;` is executed. +- `node_top` is a static variable. +It points the top node of the tree. +- `$$` is a semantic value of the result, which is `program` in the second line of the example above. +The semantic value of `program` is a pointer to `node_t` type structure. +It was defined in the declaration section. +- `$1` is a semantic value of the first component, which is `statement`. +The semantic value of `statement` is also a pointer to `node_t`. +- `statement` is `primary_procedure`. +There's no action specified. +Then, the default action is executed. +It is ` $$ = $1`. +- `primary_procedure` is `FD` followed by expression. +The action calls `tree1` and assign its return value to `$$`. +`tree1` makes a tree node. +The tree node has type and union of three pointers to children nodes, string or double. +~~~ +node --+-- type + +-- union contents + +---struct {node_t *child1, *child2, *child3;}; + +---char *name + +---double value +~~~ +- `tree1` assigns the four arguments to type, child1, child2 and child3 members. +- `expression` is `NUM`. +- `tree2` assigns the two arguments to type and a double member. + +Suppose the parser reads the following program. + +~~~ +fd 100 +~~~ + +What does the parser do? + +1. The parser recognizes the input is `FD`. +Maybe it is the start of `primary_procedure`, but parser needs to read the next token. +2. `yylex` returns the token kind `NUM` and sets `yylval.NUM` to 100.0 (the type is double). The parser reduces `NUM` to `expression`. +At the same time, it sets the semantic value of the `expression` to point a new node. +The node has an type `N_NUM` and a semantic value 100.0. +3. After the reduction, the buffer has `FD` and `expression`. +The parser reduces it to `primary_procedure`. +And it sets the semantic value of the `primary_procedure` to point a new node. +The node has an type `N_FD` and its member child1 points the node of `expression`, whose type is `N_NUM`. +4. The parser reduces `primary_procedure` to `statement`. +The semantic value of `statement` is the same as the one of `primary_procedure`, +which points to the node `N_FD`. +5. The parser reduces `statement` to `program`. +The semantic value of `statement` is assigned to the one of `program` and the static variable `node_top`. +6. Finally `node_top` points the node `N_FD` and the node `N_FD` points the node `N_NUM`. + +![tree](../image/tree.png) + +The following is the grammar rule extracted from `turtle.y`. +The rules there are based on the same idea above. +I don't want to explain the whole rules below. +Please look into each line carefully so that you will understand all the rules and actions. + +~~~bison +program: + statement { node_top = $$ = $1; } +| program statement { + node_top = $$ = tree1 (N_program, $1, $2, NULL); + } +; + +statement: + primary_procedure +| procedure_definition +; + +primary_procedure: + PU { $$ = tree1 (N_PU, NULL, NULL, NULL); } +| PD { $$ = tree1 (N_PD, NULL, NULL, NULL); } +| PW expression { $$ = tree1 (N_PW, $2, NULL, NULL); } +| FD expression { $$ = tree1 (N_FD, $2, NULL, NULL); } +| TR expression { $$ = tree1 (N_TR, $2, NULL, NULL); } +| BC '(' expression ',' expression ',' expression ')' { $$ = tree1 (N_BC, $3, $5, $7); } +| FC '(' expression ',' expression ',' expression ')' { $$ = tree1 (N_FC, $3, $5, $7); } + /* assignment */ +| ID '=' expression { $$ = tree1 (N_ASSIGN, tree3 (N_ID, $1), $3, NULL); } + /* control flow */ +| IF '(' expression ')' '{' primary_procedure_list '}' { $$ = tree1 (N_IF, $3, $6, NULL); } +| RT { $$ = tree1 (N_RT, NULL, NULL, NULL); } +| RS { $$ = tree1 (N_RS, NULL, NULL, NULL); } + /* user defined procedure call */ +| ID '(' ')' { $$ = tree1 (N_procedure_call, tree3 (N_ID, $1), NULL, NULL); } +| ID '(' argument_list ')' { $$ = tree1 (N_procedure_call, tree3 (N_ID, $1), $3, NULL); } +; + +procedure_definition: + DP ID '(' ')' '{' primary_procedure_list '}' { + $$ = tree1 (N_procedure_definition, tree3 (N_ID, $2), NULL, $6); + } +| DP ID '(' parameter_list ')' '{' primary_procedure_list '}' { + $$ = tree1 (N_procedure_definition, tree3 (N_ID, $2), $4, $7); + } +; + +parameter_list: + ID { $$ = tree3 (N_ID, $1); } +| parameter_list ',' ID { $$ = tree1 (N_parameter_list, $1, tree3 (N_ID, $3), NULL); } +; + +argument_list: + expression +| argument_list ',' expression { $$ = tree1 (N_argument_list, $1, $3, NULL); } +; + +primary_procedure_list: + primary_procedure +| primary_procedure_list primary_procedure { + $$ = tree1 (N_primary_procedure_list, $1, $2, NULL); + } +; + +expression: + expression '=' expression { $$ = tree1 (N_EQ, $1, $3, NULL); } +| expression '>' expression { $$ = tree1 (N_GT, $1, $3, NULL); } +| expression '<' expression { $$ = tree1 (N_LT, $1, $3, NULL); } +| expression '+' expression { $$ = tree1 (N_ADD, $1, $3, NULL); } +| expression '-' expression { $$ = tree1 (N_SUB, $1, $3, NULL); } +| expression '*' expression { $$ = tree1 (N_MUL, $1, $3, NULL); } +| expression '/' expression { $$ = tree1 (N_DIV, $1, $3, NULL); } +| '-' expression %prec UMINUS { $$ = tree1 (N_UMINUS, $2, NULL, NULL); } +| '(' expression ')' { $$ = $2; } +| ID { $$ = tree3 (N_ID, $1); } +| NUM { $$ = tree2 (N_NUM, $1); } +; +~~~ + +### Epilogue + +The epilogue is written in C language and copied to the parser implementation file. +Generally, you can put anything into epilogue. +In the case of turtle interpreter, the runtime routine and some other functions are in the epilogue. + +#### Functions to generate tree nodes + +There are three functions, `tree1`, `tree2` and `tree3`. + +- `tree1` creates a node and sets the node type and pointers to its three children (NULL is possible). +- `tree2` creates a node and sets the node type and a value. +- `tree3` creates a node and sets the node type and a pointer to a string. + +Each function gets memories first and build a node on them. +The memories are inserted to the list. +They will be freed when runtime routine finishes. + +The three functions are called in the actions in the rules section. + +~~~C +/* Dynamically allocated memories are added to the single list. They will be freed in the finalize function. */ +GSList *list = NULL; + +node_t * +tree1 (int type, node_t *child1, node_t *child2, node_t *child3) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + child1(new_node) = child1; + child2(new_node) = child2; + child3(new_node) = child3; + return new_node; +} + +node_t * +tree2 (int type, double value) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + value(new_node) = value; + return new_node; +} + +node_t * +tree3 (int type, char *name) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + name(new_node) = name; + return new_node; +} +~~~ + +#### Symbol table + +Variables and user defined procedures are registered in a symbol table. +This table is a C array. +It should be replaced by more appropriate data structure with memory allocation in the future version + +- Variables are registered with its name and value. +- Procedures are registered with its name and a pointer to the node of the procedure. + +Therefore the table has the following fields. + +- type to identify variable or procedure +- name +- value or pointer to a node + +~~~C +#define MAX_TABLE_SIZE 100 +enum { + PROC, + VAR +}; + +typedef union _object_t object_t; +union _object_t { + node_t *node; + double value; +}; + +struct { + int type; + char *name; + object_t object; +} table[MAX_TABLE_SIZE]; +int tp; + +void +init_table (void) { + tp = 0; +} + +~~~ + +`init_table` initializes the table. +This must be called before any registrations. + +There are five functions to access the table, + +- `proc_install` installs a procedure. +- `var_install` installs a variable. +- `proc_lookup` looks up a procedure. If the procedure is found, it returns a pointer to the node. Otherwise it returns NULL. +- `var_lookup` looks up a variable. If the variable is found, it returns TRUE and sets the pointer (argument) to point the value. Otherwise it returns FALSE. +- `var_replace` replaces the value of a variable. If the variable hasn't registered yet, it installs the variable. + +~~~C +int +tbl_lookup (int type, char *name) { + int i; + + if (tp == 0) + return -1; + for (i=0; i= MAX_TABLE_SIZE) + runtime_error ("Symbol table overflow.\n"); + else if (tbl_lookup (type, name) >= 0) + runtime_error ("Name %s is already registered.\n", name); + else { + table[tp].type = type; + table[tp].name = name; + if (type == PROC) + table[tp++].object.node = object.node; + else + table[tp++].object.value = object.value; + } +} + +void +proc_install (char *name, node_t *node) { + object_t object; + object.node = node; + tbl_install (PROC, name, object); +} + +void +var_install (char *name, double value) { + object_t object; + object.value = value; + tbl_install (VAR, name, object); +} + +void +var_replace (char *name, double value) { + int i; + if ((i = tbl_lookup (VAR, name)) >= 0) + table[i].object.value = value; + else + var_install (name, value); +} + +node_t * +proc_lookup (char *name) { + int i; + if ((i = tbl_lookup (PROC, name)) < 0) + return NULL; + else + return table[i].object.node; +} + +gboolean +var_lookup (char *name, double *value) { + int i; + if ((i = tbl_lookup (VAR, name)) < 0) + return FALSE; + else { + *value = table[i].object.value; + return TRUE; + } +} +~~~ + +#### Stack for parameters and arguments + +Stack is a last-in first-out data structure. +It is shortened to LIFO. +Turtle uses a stack to keep parameters and arguments. +They are like `auto` class variables in C language. +They are pushed to the stack whenever the procedure is called. +LIFO structure is useful for recursive calls. + +Each element of the stack has name and value. + +~~~C +#define MAX_STACK_SIZE 500 +struct { + char *name; + double value; +} stack[MAX_STACK_SIZE]; +int sp, sp_biggest; + +void +init_stack (void) { + sp = sp_biggest = 0; +} +~~~ + +`sp` is a stack pointer. +It is an index of the array `stack` and it always points an element of the array to store the next data. +`sp_biggest` is the biggest number assigned to `sp`. +We can know the amount of elements used in the array during the runtime. +The purpose of the variable is to find appropriate `MAX_STACK_SIZE`. +It will be unnecessary in the future version if the stack is implemented with better data structure and memory allocation. + +The runtime routine push data to the stack when it executes a procedure call node. + +~~~ +dp drawline (angle, distance) { ... ... ... } +drawline (90, 100) +~~~ + +- The first line defines a procedure `drawline`. +The runtime routine stores the name `drawline` and the node of the procedure to the symbol table. +- The second line calls the procedure. +First, it looks for the procedure in the symbol table and gets its node. +Then it searches the node for the parameters and gets `angle` and `distance`. +- It pushes ("distance", 100.0) to the stack. +- It pushes ("angle", 90.0) to the stack. +- It pushes (NULL, 2.0) to the stack. +The number 2.0 is the number of parameters (or arguments). +It is used when the procedure returns. + +The following diagram shows the structure of the stack. +First, `procedure 1` is called. +The procedure has two parameters. +In the `procedure 1`, another procedure `procedure 2`, which has one parameter, is called. +And in the `procedure 2`, `procedure 3`, which has three parameters, is called. + +Programs push data to a stack from a low address memory to a high address memory. +In the following diagram, the lowest address is at the top and the highest address is at the bottom. +That is the order of the address. +However, "the top of the stack" is the last pushed data and "the bottom of the stack" is the first pushed data. +Therefore, "the top of the stack" is the bottom of the rectangle in the diagram and "the bottom of the stack" is the top of the rectangle. + +![Stack](../image/stack.png) + +There are four functions to access the stack. + +- `stack_push` pushes data to the stack. +- `stack_lookup` searches the stack for the variable given its name as an argument. +It searches only the parameters of the latest procedure. +It returns TRUE and sets the argument `value` to point the value, if the variable has been found. +Otherwise it returns FALSE. +- `stack_replace` replaces the value of the variable in the stack. +If it successes, it returns TRUE. Otherwise returns FALSE. +- `stack_return` throws away the latest parameters. +The stack pointer goes back to the point before the latest procedure call so that it points to parameters of the previous called procedure. + +~~~C +void +stack_push (char *name, double value) { + if (sp >= MAX_STACK_SIZE) + runtime_error ("Stack overflow.\n"); + else { + stack[sp].name = name; + stack[sp++].value = value; + sp_biggest = sp > sp_biggest ? sp : sp_biggest; + } +} + +int +stack_search (char *name) { + int depth, i; + + if (sp == 0) + return -1; + depth = (int) stack[sp-1].value; + if (depth + 1 > sp) /* something strange */ + runtime_error ("Stack error.\n"); + for (i=0; i sp) /* something strange */ + runtime_error ("Stack error.\n"); + sp -= depth + 1; +} +~~~ + +#### Surface and cairo + +A global variable `surface` is shared by `turtleapplication.c` and `turtle.y`. +It is initialized in `turtleapplication.c`. + +The runtime routine has its own cairo context. +This is different from the cairo of GtkDrawingArea. +Runtime routine draws a shape on the `surface` with the cairo context. +After runtime routine returns to `run_cb`, the drawing function `draw_func` copies the `surface` to the surface in the GtkDrawingArea object. + +`turtle.y` has two functions `init_cairo` and `destroy_cairo`. + +- `init_cairo` initializes static variables and cairo context. +The variables keep pen status (up or down), direction, initial location, line width and color. +The size of the `surface` changes according to the size of the window. +Whenever a user drags and resizes the window, the `surface` is also resized. +`init_cairo` gets the size first and sets the initial location of the turtle (center of the surface) and the transformation matrix. +- `destroy_cairo` just destroys the cairo context. + +Turtle has its own coordinate. +The origin is at the center of the surface, and positive direction of x and y axes are right and up respectively. +But surfaces have its own coordinate. +Its origin is at the top-left corner of the surface and positive direction of x and y are right and down respectively. +A plane with the turtle's coordinate is called user space, which is the same as cairo's user space. +A plane with the surface's coordinate is called device space. + +Cairo provides a transformation which is an affine transformation. +It transforms a user-space coordinate (x, y) into a device-space coordinate (z, w). + +![transformation](../image/transformation.png) + +`init_cairo` gets the width and height of the `surface` (See the program below). + +- The center of the surface is (0,0) with regard to the user-space coordinate and (width/2, height/2) with regard to the device-space coordinate. +- The positive direction of x axis in the two spaces are the same. So, (1,0) is transformed into (1+width/2,height/2). +- The positive direction of y axis in the two spaces are opposite. So, (0,1) is transformed into (width/2,-1+height/2). + +You can determine a, b, c, d, p and q by substituting the numbers above for x, y, z and w in the equation above. +The solution of the simultaneous equations is: + +~~~ +a = 1, b = 0, c = 0, d = -1, p = width/2, q = height/2 +~~~ + +Cairo provides a structure `cairo_matrix_t`. +`init_cairo` uses it and sets the cairo transformation (See the program below). +Once the matrix is set, the transformation always performs whenever `cairo_stroke` function is invoked. + +~~~C +/* status of the surface */ +static gboolean pen = TRUE; +static double angle = 90.0; /* angle starts from x axis and measured counterclockwise */ + /* Initially facing to the north */ +static double cur_x = 0.0; +static double cur_y = 0.0; +static double line_width = 2.0; + +struct color { + double red; + double green; + double blue; +}; +static struct color bc = {0.95, 0.95, 0.95}; /* white */ +static struct color fc = {0.0, 0.0, 0.0}; /* black */ + +/* cairo */ +static cairo_t *cr; +gboolean +init_cairo (void) { + int width, height; + pen = TRUE; + angle = 90.0; + cur_x = 0.0; + cur_y = 0.0; + line_width = 2.0; + bc.red = 0.95; bc.green = 0.95; bc.blue = 0.95; + fc.red = 0.0; fc.green = 0.0; fc.blue = 0.0; + + width = cairo_image_surface_get_width (surface); + height = cairo_image_surface_get_height (surface); + + cairo_matrix_t matrix; + matrix.xx = 1.0; matrix.xy = 0.0; matrix.x0 = (double) width / 2.0; + matrix.yx = 0.0; matrix.yy = -1.0; matrix.y0 = (double) height / 2.0; + if (surface) { + cr = cairo_create (surface); + cairo_transform (cr, &matrix); + cairo_set_source_rgb (cr, bc.red, bc.green, bc.blue); + cairo_paint (cr); + cairo_set_source_rgb (cr, fc.red, fc.green, fc.blue); + cairo_move_to (cr, cur_x, cur_y); + return TRUE; + } else + return FALSE; +} + +void +destroy_cairo () { + cairo_destroy (cr); +} +~~~ + +#### Eval function + +A function `eval` evaluates an expression and returns the value of the expression. +It calls itself recursively. +For example, if the node is `N_ADD`, then: + +1. Calls eval(child1(node)) and gets the value1. +2. Calls eval(child2(node)) and gets the value2. +3. Returns value1+value2. + +This is performed by a macro `calc` defined in the sixth line in the following program. + +~~~C +double +eval (node_t *node) { +double value = 0.0; + if (node == NULL) + runtime_error ("No expression to evaluate.\n"); +#define calc(op) eval (child1(node)) op eval (child2(node)) + switch (node->type) { + case N_EQ: + value = (double) calc(==); + break; + case N_GT: + value = (double) calc(>); + break; + case N_LT: + value = (double) calc(<); + break; + case N_ADD: + value = calc(+); + break; + case N_SUB: + value = calc(-); + break; + case N_MUL: + value = calc(*); + break; + case N_DIV: + if (eval (child2(node)) == 0.0) + runtime_error ("Division by zerp.\n"); + else + value = calc(/); + break; + case N_UMINUS: + value = -(eval (child1(node))); + break; + case N_ID: + if (! (stack_lookup (name(node), &value)) && ! var_lookup (name(node), &value) ) + runtime_error ("Variable %s not defined.\n", name(node)); + break; + case N_NUM: + value = value(node); + break; + default: + runtime_error ("Illegal expression.\n"); + } + return value; +} +~~~ + +#### Execute function + +Primary procedures and procedure definitions are analyzed and carried out by a function `execute`. +It doesn't return any values. +It calls itself recursively. +The process of `N_RT` and `N_procedure_call` is complicated. +It will explained after the following program. +Other parts are not so difficult. +Read the program below carefully so that you will understand the process. + +~~~C +/* procedure - return status */ +static int proc_level = 0; +static int ret_level = 0; + +void +execute (node_t *node) { + double d, x, y; + char *name; + int n, i; + + if (node == NULL) + runtime_error ("Node is NULL.\n"); + if (proc_level > ret_level) + return; + switch (node->type) { + case N_program: + execute (child1(node)); + execute (child2(node)); + break; + case N_PU: + pen = FALSE; + break; + case N_PD: + pen = TRUE; + break; + case N_PW: + line_width = eval (child1(node)); /* line width */ + break; + case N_FD: + d = eval (child1(node)); /* distance */ + x = d * cos (angle*M_PI/180); + y = d * sin (angle*M_PI/180); + /* initialize the current point = start point of the line */ + cairo_move_to (cr, cur_x, cur_y); + cur_x += x; + cur_y += y; + cairo_set_line_width (cr, line_width); + cairo_set_source_rgb (cr, fc.red, fc.green, fc.blue); + if (pen) + cairo_line_to (cr, cur_x, cur_y); + else + cairo_move_to (cr, cur_x, cur_y); + cairo_stroke (cr); + break; + case N_TR: + angle -= eval (child1(node)); + for (; angle < 0; angle += 360.0); + for (; angle>360; angle -= 360.0); + break; + case N_BC: + bc.red = eval (child1(node)); + bc.green = eval (child2(node)); + bc.blue = eval (child3(node)); +#define fixcolor(c) c = c < 0 ? 0 : (c > 1 ? 1 : c) + fixcolor (bc.red); + fixcolor (bc.green); + fixcolor (bc.blue); + /* clear the shapes and set the background color */ + cairo_set_source_rgb (cr, bc.red, bc.green, bc.blue); + cairo_paint (cr); + break; + case N_FC: + fc.red = eval (child1(node)); + fc.green = eval (child2(node)); + fc.blue = eval (child3(node)); + fixcolor (fc.red); + fixcolor (fc.green); + fixcolor (fc.blue); + break; + case N_ASSIGN: + name = name(child1(node)); + d = eval (child2(node)); + if (! stack_replace (name, d)) /* First, tries to replace the value in the stack (parameter).*/ + var_replace (name, d); /* If the above fails, tries to replace the value in the table. If the variable isn't in the table, installs it, */ + break; + case N_IF: + if (eval (child1(node))) + execute (child2(node)); + break; + case N_RT: + ret_level--; + break; + case N_RS: + pen = TRUE; + angle = 90.0; + cur_x = 0.0; + cur_y = 0.0; + line_width = 2.0; + fc.red = 0.0; fc.green = 0.0; fc.blue = 0.0; + /* To change background color, use bc. */ + break; + case N_procedure_call: + name = name(child1(node)); +node_t *proc = proc_lookup (name); + if (! proc) + runtime_error ("Procedure %s not defined.\n", name); + if (strcmp (name, name(child1(proc))) != 0) + runtime_error ("Unexpected error. Procedure %s is called, but invoked procedure is %s.\n", name, name(child1(proc))); +/* make tuples (parameter (name), argument (value)) and push them to the stack */ +node_t *param_list; +node_t *arg_list; + param_list = child2(proc); + arg_list = child2(node); + if (param_list == NULL) { + if (arg_list == NULL) { + stack_push (NULL, 0.0); /* number of argument == 0 */ + } else + runtime_error ("Procedure %s has different number of argument and parameter.\n", name); + }else { +/* Don't change the stack until finish evaluating the arguments. */ +#define TEMP_STACK_SIZE 20 + char *temp_param[TEMP_STACK_SIZE]; + double temp_arg[TEMP_STACK_SIZE]; + n = 0; + for (; param_list->type == N_parameter_list; param_list = child1(param_list)) { + if (arg_list->type != N_argument_list) + runtime_error ("Procedure %s has different number of argument and parameter.\n", name); + if (n >= TEMP_STACK_SIZE) + runtime_error ("Too many parameters. the number must be %d or less.\n", TEMP_STACK_SIZE); + temp_param[n] = name(child2(param_list)); + temp_arg[n] = eval (child2(arg_list)); + arg_list = child1(arg_list); + ++n; + } + if (param_list->type == N_ID && arg_list -> type != N_argument_list) { + temp_param[n] = name(param_list); + temp_arg[n] = eval (arg_list); + if (++n >= TEMP_STACK_SIZE) + runtime_error ("Too many parameters. the number must be %d or less.\n", TEMP_STACK_SIZE); + temp_param[n] = NULL; + temp_arg[n] = (double) n; + ++n; + } else + runtime_error ("Unexpected error.\n"); + for (i = 0; i < n; ++i) + stack_push (temp_param[i], temp_arg[i]); + } + ret_level = ++proc_level; + execute (child3(proc)); + ret_level = --proc_level; + stack_return (); + break; + case N_procedure_definition: + name = name(child1(node)); + proc_install (name, node); + break; + case N_primary_procedure_list: + execute (child1(node)); + execute (child2(node)); + break; + default: + runtime_error ("Unknown statement.\n"); + } +} +~~~ + +A node `N_procedure_call` is created by the parser when it has found a user defined procedure call. +The procedure has been defined in the prior statement. +Suppose the parser reads the following example code. + +~~~ +dp drawline (angle, distance) { + tr angle + fd distance +} +drawline (90, 100) +drawline (90, 100) +drawline (90, 100) +drawline (90, 100) +~~~ + +This example draws a square. + +When The parser reads the lines from one to four, it creates nodes like this: + +![Nodes of drawline](../image/tree2.png) + +Runtime routine just stores the procedure to the symbol table with its name and node. + +![Symbol table](../image/table.png) + +When the parser reads the fifth line in the example, it creates nodes like this: + +![Nodes of procedure call](../image/proc_call.png) + +When the runtime routine meets `N_procedure_call` node, it behaves like this: + +1. Searches the symbol table for the procedure by the name. +2. Gets pointers to the node to parameters and the node to the body. +3. Creates a temporary stack. +Makes a tuple of each parameter name and argument value. +Pushes the tuples into the stack, and (NULL, number of parameters) finally. +If no error occurs, copies them from the temporary stack to the parameter stack. +4. Increases `prc_level` by one. +Sets `ret_level` to the same value as `proc_level`. +`proc_level` is zero when runtime routine runs on the main routine. +If it goes into a procedure, `proc_level` increases by one. +Therefore, `proc_level` is the depth of the procedure call. +`ret_level` is the level to return. +If it is the same as `proc_level`, runtime routine executes commands in order of the commands in the procedure. +If it is smaller than `proc_level`, runtime routine doesn't execute commands until it becomes the same level as `proc_level`. +`ret_level` is used to return the procedure. +5. Executes the node of the body of the procedure. +6. Decreases `proc_level` by one. +Sets `ret_level` to the same value as `proc_level`. +Calls `stack_return`. + +When the runtime routine meets `N_RT` node, it decreases `ret_level` by one so that the following commands in the procedure are ignored by the runtime routine. + +#### Runtime entry and error functions + +A function `run` is the entry of the runtime routine. +A function `runtime_error` reports an error occurred during the runtime routine runs. +(Errors which occur during the parsing are called syntax error and reported by `yyerror`.) +After `runtime_error` reports an error, it stops the command execution and goes back to `run` to exit. + +Setjmp and longjmp functions are used. +They are declared in ``. +`setjmp (buf)` saves state information in `buf` and returns zero. +`longjmp(buf, 1)` restores the state information from `buf` and returns `1` (the second argument). +Because the information is the status at the time `setjmp` is called, so longjmp resumes the execution at the next of setjmp function call. +In the following program, longjmp resumes at the assignment to the variable `i`. +When setjmp is called, 0 is assigned to `i` and `execute(node_top)` is called. +On the other hand, when longjmp is called, 1 is assigned to `i` and `execute(node_top)` is not called.. + +`g_slist_free_full` frees all the allocated memories. + +~~~C +static jmp_buf buf; + +void +run (void) { + int i; + + if (! init_cairo()) { + g_print ("Cairo not initialized.\n"); + return; + } + init_table(); + init_stack(); + ret_level = proc_level = 1; + i = setjmp (buf); + if (i == 0) + execute(node_top); + /* else ... get here by calling longjmp */ + destroy_cairo (); + g_slist_free_full (g_steal_pointer (&list), g_free); +} + +/* format supports only %s, %f and %d */ +static void +runtime_error (char *format, ...) { + va_list args; + char *f; + char b[3]; + char *s; + double v; + int i; + + va_start (args, format); + for (f = format; *f; f++) { + if (*f != '%') { + b[0] = *f; + b[1] = '\0'; + g_print ("%s", b); + continue; + } + switch (*++f) { + case 's': + s = va_arg(args, char *); + g_print ("%s", s); + break; + case 'f': + v = va_arg(args, double); + g_print("%f", v); + break; + case 'd': + i = va_arg(args, int); + g_print("%d", i); + break; + default: + b[0] = '%'; + b[1] = *f; + b[2] = '\0'; + g_print ("%s", b); + break; + } + } + va_end (args); + + longjmp (buf, 1); +} + +~~~ + +A function `runtime_error` has a variable-length argument list. + +~~~C +void runtime_error (char *format, ...) +~~~ + +This is implemented with `` header file. +The `va_list` type variable `args` will refer to each argument in turn. +A function `va_start` initializes `args`. +A function `va_arg` returns an argument and moves the reference of `args` to the next. +A function `va_end` cleans up everything necessary at the end. + +The function `runtime_error` has a similar format of printf standard function. +But its format has only `%s`, `%f` and `%d`. + +The functions declared in `` and `` are explained in the very famous book "The C programming language" written by Brian Kernighan and Dennis Ritchie. +I referred to the book to write the program above. + +The program `turtle` is unsophisticated and unpolished. +If you want to make your own language, you need to know more and more. +I don't know any good textbook about compilers and interpreters. +If you know a good book, please let me know. + +However, the following information is very useful (but old). + +- Bison documentation +- Flex documentation +- Software tools written by Brian W. Kernighan & P. J. Plauger (1976) +- Unix programming environment written by Brian W. Kernighan and Rob Pike (1984) +- Source code of a language, for example, ruby. + +Lately, lots of source codes are in the internet. +Maybe reading source codes are the most useful for programmers. Up: [Readme.md](../Readme.md), Prev: [Section 22](sec22.md) diff --git a/gfm/sec6.md b/gfm/sec6.md index 19963d1..84eab12 100644 --- a/gfm/sec6.md +++ b/gfm/sec6.md @@ -29,7 +29,7 @@ gtk_application_new (const gchar *application_id, GApplicationFlags flags); This flag is described in the GApplication section in GIO API reference. -~~~C +~~~ GApplicationFlags' Members G_APPLICATION_FLAGS_NONE Default. (No argument allowed) diff --git a/gfm/sec9.md b/gfm/sec9.md index 93aa0ea..5925e2b 100644 --- a/gfm/sec9.md +++ b/gfm/sec9.md @@ -206,7 +206,7 @@ It is an old and widely used program. Make analyzes Makefile and executes compilers. All instructions are written in Makefile. -~~~Makefile +~~~makefile sample.o: sample.c gcc -o sample.o sample.c ~~~ diff --git a/image/proc_call.png b/image/proc_call.png new file mode 100644 index 0000000000000000000000000000000000000000..357bcfb22a7a7021d7952440618c77f5fe02d1ba GIT binary patch literal 24009 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 Ki#Zo;g8m1cylv(H literal 0 HcmV?d00001 diff --git a/image/proc_call.xcf b/image/proc_call.xcf new file mode 100644 index 0000000000000000000000000000000000000000..ce108c0a0dc5bbd2ec93b30bf20eece33291c4b5 GIT binary patch literal 46568 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 DteIUz literal 0 HcmV?d00001 diff --git a/image/stack.png b/image/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b440cbcd06d6b65a28d2e2b30c3b81d19f01e7 GIT binary patch literal 31034 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 A3;+NC literal 0 HcmV?d00001 diff --git a/image/table.png b/image/table.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3d100c9626569df5eec2b044077c3571cba186 GIT binary patch literal 21679 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 literal 0 HcmV?d00001 diff --git a/image/table.xcf b/image/table.xcf new file mode 100644 index 0000000000000000000000000000000000000000..9df41a38ed486cd67ecbf7fd3cdb648ceedfd7db GIT binary patch literal 39630 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 literal 0 HcmV?d00001 diff --git a/image/transformation.png b/image/transformation.png new file mode 100644 index 0000000000000000000000000000000000000000..ff42044d02c7dcf5e4f6cad4e3cb28edb4424165 GIT binary patch literal 10607 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 literal 0 HcmV?d00001 diff --git a/image/tree2.png b/image/tree2.png new file mode 100644 index 0000000000000000000000000000000000000000..9d63948cdcbeaba2a5f06bc37356a28569c95973 GIT binary patch literal 66241 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 literal 0 HcmV?d00001 diff --git a/image/tree2.xcf b/image/tree2.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d991fe53ded7925f88f8cab0dfbac562c758e9a1 GIT binary patch literal 92749 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

M~QfN3Ee>^zd+j$eJD>_ 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 Avj6}9 delta 6581 zcmc)OeNYtV9l-Hj5IE{PD0f1X_>y`m1{5t9MZpmDqNxd5^{h?QGR8A%Fj)2C+xk-U ztP)Jt$|XpB!+H(@UsmBV6y$WQq$b+dW@N^u#yA~ujCE4$cpWu#?|xr1bf(k4@^UkG zpZ)#zd7j@syL-r7 z^N~@&X-YR{ z)y>6@#kgMVzFACo2lwM~JdJ-Adqm*?%tj{CgYkR(GMv{GrN?d>oIqyK^LG;Wd>sFk z_zQd}TA7)xhr~7t+eQ#GK^q5<%mqp=GWVPHmE?`mFqs)9?6SrV1hQz*{iM}?8`$b^_ z_QT=$Y-Ik5(tnC12K*FX!&TxBhl&G-;W*KLP#knm92|o^@hKdMd?yA^mpH8;eE!W> z8sF8lO~g7L5QiQSpRULAcm;3a12MfLrr?i|OOVbbNY^;!>0E-0SZSESsU3Dw;^9kh zEwX3~uaG#C#bgBSN1T=Xh)?kEcuyP|BWfdil6VS7;&_~nzZbJOBUuLV8S$Al;wZ)$ z#WP; z$E=ma*sWp?N1pRMF&%PPo^y)Hzl+rv#82=hJ`!`gBWEc088Z%V=W=AZ^JuUfIiTDM z!_sBJNOhIIG%uysF4-CR4Busm66e(zm3eEU)HFS3N^;Z$r#^OqRh?_hn2^??cS*Z0 zed*Fca+410dnQ@cpiwtzOSJmD**Qg>Z}v@!nzGjHJUYs#dFd-vt<(QBHBoPxYKiBD zpZ?IySmU|fr&k$YPW?fQ8mm8?nbM1Id89!2=r}^xC?mu5FiOpejFmgv5=8?)nL)J^7C$;or~NH+4>Zm_v^=3uI7)Xcl5_O5ByW~{j#ZpZuz{-8G% zSk=#smV(j_Ba7NKO#knO?zjHOJ~QS1t+CtvQM9^DU${6WzDyb|9jKQqw#L^SMv0xxpoleO`J8ZbqrNCER{dBnEJ;rA@B_c@ zZRxYFLcim&b`M`F^R=3_X7yd;>gJjl{p`AH>aj>a?Nez{%neh#!R(imus%l88!5Q) zvUEILd`*J-7 zo*(I3!d<_E6?MlU<4j3IjDFC$O;6mJuNLZW?@a8)RoPiCeak3Rw#VFS?aorNtGDdk zHD15Ed4>My%_9Bksv=EO&9AGasV!n`Q)$F-F1G1ryX_Ajx64yHl}3MaZ|(mMHc>Il z-89R6Yj3Un;E{44nwjt9JyFr3rWrfR`l)I|`^)I#eks2u7p(lYxi=}{T^73c7D@U& z-S}WS{-zfHCjImG-ZodLcDKks{TRSzY{6Cxi8U6qp&cFQL>Icz6V_Z&YP=+T=*IvyV+*!oNIYUe8`{xgG@QZTXOTveK3}7?1U@L}1!-6)n zqXV7jLN{t2HoWLVKL)TFTd);F;t31d(2fptq6^)kcEUr#i$3&Y0GqJ|TQMY_w4e>` z=s+jB&>c}zPI^dq(T9EvU^BL0D~7~c3);|*4s@am-C+kPO09>47k%i*fU&OX*-q*i zJy@4GC{B{6C*w>kz(QOd`430~k8ut4l5RMKJdQM+Bj!1*;Ue)Ryo^`yDqhDMcnj~~ z-H4jf!0%MU19r5DjnT+_8aonq#YD7X3Z`Oz9Ed|O9W%pfiqe=xVl?Jp9!|u`_##fj znK&EgU;!?`MOcW-OwIaA<4O{%F`P7Cjhk=_Zo^X4u?)*`4<5inScON>V0CS*BT6CPD<+~9Q!o|#<3JpO>6odp zk%gl%2lH?uPR19-reQcn3{p5q;UI;B6b@22m`Qt$!a)iLDIBD5kitO<2Pqt!#sD*M zHqOBUT!4$P5SNKsa3zV=sNp8ug4?hZbu7bj+=B=35LV$4G$LwBu#QAMp29PD4$tF7 zyo8tW3SPzQcmr?Y9lRUXoNe$vi3ivwo{q*i?1)`45v`blsn{O};t)*7Ow;gxKu%|o z7>zlYhZBwJhJC80lqwl*UB0)s_U#te)F$(4tXH(o;XiU^JF#tu^7UJ5AAAqn`ClK& WH&R?vztDp{$Lg_-d-Z<7ZT|rZKvqHk diff --git a/src/sec23.src.md b/src/sec23.src.md index 9cc3b9c..65da3b4 100644 --- a/src/sec23.src.md +++ b/src/sec23.src.md @@ -9,7 +9,7 @@ The following diagram is a Koch curve, which is a famous example of fractal curv This program uses flex and bison. Flex is a lexical analyzer. Bison is a parser generator. -These two programs are similar to lex and yacc which are proprietary software developed in Bell Laboratry. +These two programs are similar to lex and yacc which are proprietary software developed in Bell Laboratory. However, flex and bison are open source software. I will write about how to use those software, but they are not topics about gtk. So, readers can skip that part of this sections. @@ -41,7 +41,7 @@ The side of the square is 100 pixels long. In the same way, you can draw other curves. The documentation above shows some fractal curves such as tree, snow and square-koch. The source code in turtle language is located at [src/turtle/example](turtle/example) directory. -You can read these files by clicking on the `Open` button. +You can read these files into `turtle` editor by clicking on the `Open` button. ## Combination of TfeTextView and GtkDrawingArea objects @@ -59,22 +59,21 @@ turtle/turtleapplication.c run_cb resize_cb - 8-13: The static value `busy` holds a status of the interpreter. If it is `TRUE`, the interpreter is running and it is not possible to call the interpreter again because it's not a re-entrant program. If it is `FALSE`, it is safe to call the interpreter. -- 14: Now it is about to call the interpreter so let `busy` variable to be TRUE. +- 14: Now it is about to call the interpreter so changes `busy` to be TRUE. - 15-16: Gets the contents of GtkTextBuffer. -- 17: The varable `surface` is a static variable. +- 17: The variable `surface` is a static variable. It points to a `cairo_surface_t` object. -It is generated when the GtkDrawingArea object is realized and the each time it is resized. +It is generated when the GtkDrawingArea object is realized and whenever it is resized. Therefore, `surface` isn't NULL usually. But if it is NULL, the interpreter won't be called. -- 18-19: Initializes lexcal analyzer, then parser. -- 20: Calls parser. +- 18: Initializes lexical analyzer. +- 19: Calls parser. Parser analyze the program codes syntactically and generate a tree structured data. -- 24-26: If the parser succesfully parsed, it calls `run` which is the interpreter. -`Run` executes the tree-structured program. -- 27: finalize the lexical analyzer. -- 29: Add the drawing area object to the queue to draw. -- 30: The interpreter program has finished so `busy` is now FALSE. -- 33-38: A handler of "resized" signal. +- 20-22: If the parser successfully parsed, it calls `run` (runtime routine). +- 23: finalize the lexical analyzer. +- 25: Add the drawing area object to the queue to draw. +- 26: The interpreter program has finished so `busy` is now FALSE. +- 29-34: A handler of "resized" signal. It generates or regenerates a surface object. Other part of `turtleapplication.c` is almost same as the codes of `colorapplication.c` in the previous section. @@ -93,7 +92,7 @@ The turtle recognizes the program above and works as follows. - Generally, a program consists of tokens. Tokens are "distance", "=", "100", "fd", "*" and "2" in the above example.. -- The interpreter `turtle` calls `yylex` to read a token in the source file. +- The parser calls `yylex` to read a token in the source file. The `yylex` returns a code which is called "token kind" and sets a global variable `yylval` with a value, which is called a semantic value. The type of `yylval` is union and `yylval.ID` is string and `yylval.NUM` is double. There are seven tokens in the program so `yylex` is called seven times. @@ -118,7 +117,7 @@ This part of `turtle` is called parser. - `turtle` analyzes the tree and executes it. This part of `turtle` is called runtime routine. -The tree consists of line segments and rectangles between line segments. +The tree consists of rectangles and line segments between the rectangles. The rectangles are called nodes. For example, N\_PROGRAM, N\_ASSIGN, N\_FD and N\_MUL are nodes. 1. Goes down from N\_PROGRAM to N\_ASSIGN. @@ -135,34 +134,35 @@ Saves 100 to the variable table at the `distance` record. It has only one child. Goes down to the child N\_MUL. 5. The first child is ID (distance). -Searches the variable table for the varable `distance` and gets the value 100. +Searches the variable table for the variable `distance` and gets the value 100. The second child is a number 2. Multiplies 100 by 2 and gets 200. Then `turtle` goes back to N_FD. 6. Now `turtle` knows the distance is 200. -It moves the cursor forward by 200. +It moves the cursor forward by 200 pixels. 8. There are no node follows. Runtime routine returns to the main routine. --`turtle` draws a segment on GtkDrawingArea then stops. -Actually most programs are more complicated than the example above. +- `turtle` draws a segment on GtkDrawingArea then stops. + +Most turtle programs are more complicated than the example above. So, `turtle` does much more work to interpret programs. However, basically it works by the same way above. -Interpritation consists of three parts. +Interpretation consists of three parts. - Lexical analysis - Syntax Parsing and tree generation -- Interprit the tree and execute commands. +- Interpret the tree and execute commands. ## Compilation flow The source files are: -- flex source file ~> turtle.lex -- bison source file => turtle.y -- C header file => turtle.h, turtle_lex.h -- C source file => turtleapplication.c -- other files => turtle.ui, turtle.gresources.xml, meson.build +- flex source file => `turtle.lex` +- bison source file => `turtle.y` +- C header file => `turtle.h`, `turtle_lex.h` +- C source file => `turtleapplication.c` +- other files => `turtle.ui`, `turtle.gresources.xml` and `meson.build` The compilation process is a bit complicated. @@ -170,12 +170,12 @@ The compilation process is a bit complicated. It also generates `resources.h`. 2. bison compiles `turtle.y` to `turtle_parser.c` and generates `turtle_parser.h` 3. flex compiles `turtle.lex` to `turtle_lex.c`. -4. gcc compiles `application.c`, `resources.c`, `turtle_parser.c` and `turtle_lex.c` with `turtle.h`, `resources.h` and `turtle_parser.h`. +4. gcc compiles `application.c`, `resources.c`, `turtle_parser.c` and `turtle_lex.c` with `turtle.h`, `turtle_lex.h`, `resources.h` and `turtle_parser.h`. It generates an executable file `turtle`. ![compile process](../image/turtle_compile_process.png){width=12cm height=9cm} -Meson controls the process and the instruction is described in meson.build. +Meson controls the process and the instruction is described in `meson.build`. @@@include turtle/meson.build @@ -186,7 +186,7 @@ It is usually `gcc` in linux. - 4: Gets math library. This program uses trigonometric functions. They are defined in the math library, but the library is optional. -So, it is necessary to include the library by `#include ` and also link the library with the linker. +So, it is necessary to include it by `#include ` and also link the library with the linker. - 6: Gets gtk4 library. - 8: Gets gnome module. Module is a system provided by meson. @@ -195,18 +195,18 @@ See [Meson build system website](https://mesonbuild.com/Gnome-module.html#gnome- - 11: Gets flex. - 12: Gets bison. - 13: Compiles `turtle.y` to `turtle_parser.c` and `turtle_parser.h` by bison. -The function `custom_target`creates a custom top level target. +The function `custom_target` creates a custom top level target. See [Meson build system website](https://mesonbuild.com/Reference-manual.html#custom_target) for further information. - 14: Compiles `turtle.lex` to `turtle_lex.c` by flex. -- 16: Specifies C surce files. +- 16: Specifies C source files. - 18: Compiles C source files including generated files by glib-compile-resources, bison and flex. -The argument `turtleparser[1]` refers to `tirtle_parser.h` which is the secound output in the line 13. +The argument `turtleparser[1]` refers to `tirtle_parser.h` which is the second output in the line 13. ## Turtle.lex ### What does flex do? -Flex creates lexical analizer from flex source file. +Flex creates lexical analyzer from flex source file. Flex source file is a text file and its syntactic rule will be explained later. Generated lexical analyzer is a C source file. It is also called scanner. @@ -222,10 +222,10 @@ fd distance # Go forward by distance (100) pixels. tr angle # Turn right by angle (90) degrees. ~~~ -The content of the text file is separated into `fc`, `(`, `1`, `,` and so on. -The words `fc`, `pd`, `distance` and `100` are called tokens. -The characters `(`, `<` and `=` are called symbols. -( Sometimes those symbols called token, too.) +The content of the text file is separated into `fc`, `(`, `1` and so on. +The words `fc`, `pd`, `distance`, `angle`, `tr`, `1`, `0`, `100` and `90` are called tokens. +The characters '`(`' (left parenthesis), '`,`' (comma), '`)`' (right parenthesis) and '`=`' (equal sign) are called symbols. +( Sometimes those symbols called tokens, too.) Flex reads `turtle.lex` and generates a scanner. The file `turtle.lex` specifies tokens, symbols and the behavior which corresponds to each token or symbol. @@ -235,7 +235,7 @@ Turtle.lex isn't a big program. turtle/turtle.lex @@@ -The file consists of three sections which are separated by "%%" (line 19 and 58). +The file consists of three sections which are separated by "%%" (line 18 and 56). They are definitions, rules and user code sections. ### Definitions section @@ -244,17 +244,17 @@ First, look at the definitions section. - 1-12: Lines between "%top{" and "}" are C source codes. They will be copied to the top of the generated C source file. -- 2-3: The function `strlen`, in line 64, is defined in `string.h` -The function `atof`, in line 39, is defined in `stdlib.h`. +- 2-3: The function `strlen`, in line 62, is defined in `string.h` +The function `atof`, in line 37, is defined in `stdlib.h`. - 6-8: The current input position is pointed by `nline` and `ncolumn`. -The function `get_location` (line 60-65) sets `yylloc`to point the start and end point of `yytext` in the buffer. +The function `get_location` (line 58-63) sets `yylloc`to point the start and end point of `yytext` in the buffer. This function is declared here so that it can be called before the function is defined. - 11: GSlist is used to keep allocated memories. -- 14: This option (`%option noyywrap`) must be specified when you have only single source file to the scanner. Reffur to "9 The Generated Scanner" in the flex documentation in your distribution for further information. +- 14: This option (`%option noyywrap`) must be specified when you have only single source file to the scanner. Refer to "9 The Generated Scanner" in the flex documentation in your distribution for further information. (The documentation is not on the internet.) - 16-17: `REAL_NUMBER` and `IDENTIFIER` are names. A name begins with a letter or an underscore followed by zero or more letters, digits, underscores (`_`) or dashes (`-`). -They are followed by regular expressions which are the definition of them. +They are followed by regular expressions which are their definition. They will be used in rules section and will expand to the definition. You can leave out such definitions here and use regular expressions in rules section directly. @@ -272,7 +272,7 @@ This regular expression matches numbers like `0`, `12` and `1.5`. If the input is a number, it matches the pattern in line 37. Then the matched text is assigned to `yytext` and corresponding action is executed. A function `get_location` changes the location variables. -It assigns `atof( yytext)`, which is double sized number converted from `yytext`, to `yylval.NUM` and return `NUM`. +It assigns `atof (yytext)`, which is double sized number converted from `yytext`, to `yylval.NUM` and return `NUM`. `NUM` is an integer defined by `turtle.y`. The scanner generated by flex and C compiler has `yylex` function. @@ -289,7 +289,7 @@ Then the caller knows the input is `NUM` (number), and its value is 123.4. - 19-55: Rules section. - 20: Comment begins `#` followed by any characters except newline. No action happens. -- 21: White space just increases a varable `ncolumn` by one. +- 21: White space just increases a variable `ncolumn` by one. - 22: Tab is assumed to be equal to eight spaces. - 23: New line increases a variable `nline` by one and resets `ncolumn`. - 25-35: Keywords just updates the location variables `ncolumn` and `yylloc`, and return the codes of the keywords. @@ -298,7 +298,7 @@ No action happens. It begins alphabet followed by zero or more alphabet or digit. The location variables are updated and the name of the identifier is assigned to `yylval.ID`. The memory of the name is allocated by the function `g_strdup`. -The memory is registerd to the list (GSlist type list). +The memory is registered to the list (GSlist type list). The memory will be freed after the runtime routine finishes. Returns `ID`. - 43-54: Symbols just update the location variable and return the codes. @@ -318,7 +318,7 @@ It is a C structure and has four members, `first_line`, `first_column`, `last_li They point the start and end of the current input text. - 65: `YY_BUFFER_STATE` is a type of the pointer points the input buffer. - 67-70: `init_flex` is called by `run_cb` signal handler, which is called when `Run` button is clicked on. -`run_cb` has one argument which is the copy of the content of GtkTextBuffer. +`run_cb` calls `init_flex` with one argument which is the copy of the content of GtkTextBuffer. `yy_scan_string` sets the input buffer to read from the text. - 72-75: `finalize_flex` is called after runtime routine finishes. It deletes the input buffer. @@ -330,7 +330,7 @@ So I will explain the key points and leave out other less important parts. ### What does bison do? -Bison creates C source file of a parser from bison source file. +Bison creates C source file from bison source file. Bison source file is a text file. A parser analyzes a program source code according to its grammar. Suppose here is a turtle source file. @@ -485,7 +485,7 @@ They don't appear in the input. They are called non terminal symbols. On the other hand, tokens are called terminal symbols. The word "token" used here has wide meaning, it includes tokens and symbols which appear in the input. -Non terminal symbols are often shortend to nterm. +Non terminal symbols are often shortened to nterm. Let's analyze the program above as bison does. @@ -538,15 +538,15 @@ Let's analyze the program above as bison does. The right most column shows shift/reduce. Shift is appending an input to the buffer. -Reduce is substituing a higher nterm for the pattern in the buffer. +Reduce is substituting a higher nterm for the pattern in the buffer. For example, NUM is replaced by expression in the forth row. This substitution is "reduce". Bison repeats shift and reduction until the end of the input. If the result is reduced to `program`, the input is syntactically valid. -Bison executes an action whenever reduction occers. +Bison executes an action whenever reduction occurs. Actions build a tree. -The tree is analyzed and executed by runtime routine . +The tree is analyzed and executed by runtime routine later. Bison source files are called bison grammar files. A bison grammar file consists of four sections, prologue, declarations, rules and epilogue. @@ -566,7 +566,7 @@ epilogue ### Prologue Prologue section consists of C codes and the codes are copied to the parser implementation file. -You can use `%code` directives to qualify the prologue and identifies the purpose explisitely. +You can use `%code` directives to qualify the prologue and identifies the purpose explicitly. The following is an extract from `turtle.y`. @@@if gfm @@ -596,7 +596,7 @@ The following is an extract from `turtle.y`. } ~~~ -The directove `%code top` copies its contents to the top of the parser implementation file. +The directive `%code top` copies its contents to the top of the parser implementation file. It usually includes `#include` directives, declarations of functions and definitions of constants. A function `yyerror` reports a syntax error and is called by the parser. Node type identifies a node in the tree. @@ -613,7 +613,6 @@ The header file is read by the scanner C source file and other files. @@@end %code requires { int yylex (void); - void init_parse (void); int yyparse (void); void run (void); @@ -623,9 +622,7 @@ The header file is read by the scanner C source file and other files. int type; union { struct { - node_t *child1; - node_t *child2; - node_t *child3; + node_t *child1, *child2, *child3; } child; char *name; double value; @@ -634,10 +631,8 @@ The header file is read by the scanner C source file and other files. } ~~~ -The contents of this directive are used by the other files. - -- `yylex` is shared by parser implemetation file and scanner file. -- `init_parse`, `yyparse` and `run` is called by `run_cb' in `turtleapplication.c`. +- `yylex` is shared by parser implementation file and scanner file. +- `yyparse` and `run` is called by `run_cb` in `turtleapplication.c`. - `node_t` is the type of the semantic value of nterms. The header file defines `YYSTYPE`, which is the semantic value type, with all the token and nterm value types. The following is extracted from the header file. @@ -682,7 +677,7 @@ Other useful macros and declarations are put into the `%code` directive. ### Bison declarations -Bison declarations defines terminal and nonterminal symbols. +Bison declarations defines terminal and non-terminal symbols. It also specifies some directives. ~~~ @@ -736,12 +731,12 @@ struct YYLTYPE ~~~ This type is shared by the scanner file and the parser implementation file. -The error report function `yyerror` uses it so that it can inform the location that error occers. +The error report function `yyerror` uses it so that it can inform the location that error occurs. `%define api.value.type union` generates semantic value type with tokens and nterms and inserts it to the header file. The inserted part is shown in the previous section as the extracts that shows the value type (YYSTYPE). -`%token` and `%nterm` directives define tokens and directives respectively. +`%token` and `%nterm` directives define tokens and non terminal symbols respectively. ~~~ %token PU @@ -749,7 +744,7 @@ The inserted part is shown in the previous section as the extracts that shows th %token NUM ~~~ -These directives define a token `PU` and NUM. +These directives define a token `PU` and `NUM`. The values of token kinds `PU` and `NUM` are defined as an enumeration constant in the header file. ~~~ @@ -764,7 +759,7 @@ The values of token kinds `PU` and `NUM` are defined as an enumeration constant typedef enum yytokentype yytoken_kind_t; ~~~ -In addition, the type of the semantic value of NUM is defined as double in the header file because of `` tag. +In addition, the type of the semantic value of `NUM` is defined as double in the header file because of `` tag. ~~~ union YYSTYPE @@ -788,7 +783,7 @@ All the nterm symbols have the same type `* node_t` of the semantic value. %precedence UMINUS /* unary minus */ ~~~ -`%left` directive defines the following symbols as left-associated operator. +`%left` directive defines the following symbols as left-associated operators. If an operator `+` is left-associated, then ~~~ @@ -796,7 +791,7 @@ A + B + C = (A + B) + C ~~~ That is, the calculation is carried out the left operator first, then the right operator. -If an operator `*` is right-assiciated, then: +If an operator `*` is right-associated, then: ~~~ A * B * C = A * (B * C) @@ -804,9 +799,9 @@ A * B * C = A * (B * C) The definition above decides the behavior of the parser. Addition and multiplication hold associative law so the result of `(A+B)+C` and `A+(B+C)` are equal in terms of mathematics. -However, the parser will be confused if left (or right) assosiativity is not specified. +However, the parser will be confused if left (or right) associativity is not specified. -`%left` and `%precedence` directive show the precedence of operators. +`%left` and `%precedence` directives show the precedence of operators. Later declared operators have higher precedence than former declared ones. The declaration above says, for example, @@ -815,10 +810,11 @@ v=w+z*5+7 is the same as v=((w+(z*5))+7) ~~~ Be careful. -The operator `=` is a logical equal operator, not assignment operator. +The operator `=` above is an assignment. Assignment is not expression in turtle language. It is primary_procedure. -Therefore, if `=` appears in an expression, it is *NOT* an assignment. +But if `=` appears in an expression, it is a logical operater, not an assignment. +The logical equal '`=`' usually used in the conditional expression, for example, in `if` statement. ### Grammar rules @@ -834,9 +830,89 @@ result: components { action }; - action is C codes. It is executed whenever the components are reduced to the result. Action can be left out. -The following is the first eleven lines of the grammar rule in `turtle.y`. +The following is a part of the grammar rule in `turtle.y`. ~~~ +program: + statement { node_top = $$ = $1; } +; +statement: + primary_procedure +; +primary_procedure: + FD expression { $$ = tree1 (N_FD, $2, NULL, NULL); } +; +expression: + NUM { $$ = tree2 (N_NUM, $1); } +; +~~~ + +- `program` is `statement`. +- Whenever `statement` is reduced to `program`, an action `node_top=$$=$1;` is executed. +- `node_top` is a static variable. +It points the top node of the tree. +- `$$` is a semantic value of the result, which is `program` in the second line of the example above. +The semantic value of `program` is a pointer to `node_t` type structure. +It was defined in the declaration section. +- `$1` is a semantic value of the first component, which is `statement`. +The semantic value of `statement` is also a pointer to `node_t`. +- `statement` is `primary_procedure`. +There's no action specified. +Then, the default action is executed. +It is ` $$ = $1`. +- `primary_procedure` is `FD` followed by expression. +The action calls `tree1` and assign its return value to `$$`. +`tree1` makes a tree node. +The tree node has type and union of three pointers to children nodes, string or double. +~~~ +node --+-- type + +-- union contents + +---struct {node_t *child1, *child2, *child3;}; + +---char *name + +---double value +~~~ +- `tree1` assigns the four arguments to type, child1, child2 and child3 members. +- `expression` is `NUM`. +- `tree2` assigns the two arguments to type and a double member. + +Suppose the parser reads the following program. + +~~~ +fd 100 +~~~ + +What does the parser do? + +1. The parser recognizes the input is `FD`. +Maybe it is the start of `primary_procedure`, but parser needs to read the next token. +2. `yylex` returns the token kind `NUM` and sets `yylval.NUM` to 100.0 (the type is double). The parser reduces `NUM` to `expression`. +At the same time, it sets the semantic value of the `expression` to point a new node. +The node has an type `N_NUM` and a semantic value 100.0. +3. After the reduction, the buffer has `FD` and `expression`. +The parser reduces it to `primary_procedure`. +And it sets the semantic value of the `primary_procedure` to point a new node. +The node has an type `N_FD` and its member child1 points the node of `expression`, whose type is `N_NUM`. +4. The parser reduces `primary_procedure` to `statement`. +The semantic value of `statement` is the same as the one of `primary_procedure`, +which points to the node `N_FD`. +5. The parser reduces `statement` to `program`. +The semantic value of `statement` is assigned to the one of `program` and the static variable `node_top`. +6. Finally `node_top` points the node `N_FD` and the node `N_FD` points the node `N_NUM`. + +![tree](../image/tree.png){width=6.51cm height=5.46cm} + +The following is the grammar rule extracted from `turtle.y`. +The rules there are based on the same idea above. +I don't want to explain the whole rules below. +Please look into each line carefully so that you will understand all the rules and actions. + +@@@if gfm +~~~bison +@@@elif html +~~~{.bison} +@@@else +~~~ +@@@end program: statement { node_top = $$ = $1; } | program statement { @@ -848,22 +924,894 @@ statement: primary_procedure | procedure_definition ; + +primary_procedure: + PU { $$ = tree1 (N_PU, NULL, NULL, NULL); } +| PD { $$ = tree1 (N_PD, NULL, NULL, NULL); } +| PW expression { $$ = tree1 (N_PW, $2, NULL, NULL); } +| FD expression { $$ = tree1 (N_FD, $2, NULL, NULL); } +| TR expression { $$ = tree1 (N_TR, $2, NULL, NULL); } +| BC '(' expression ',' expression ',' expression ')' { $$ = tree1 (N_BC, $3, $5, $7); } +| FC '(' expression ',' expression ',' expression ')' { $$ = tree1 (N_FC, $3, $5, $7); } + /* assignment */ +| ID '=' expression { $$ = tree1 (N_ASSIGN, tree3 (N_ID, $1), $3, NULL); } + /* control flow */ +| IF '(' expression ')' '{' primary_procedure_list '}' { $$ = tree1 (N_IF, $3, $6, NULL); } +| RT { $$ = tree1 (N_RT, NULL, NULL, NULL); } +| RS { $$ = tree1 (N_RS, NULL, NULL, NULL); } + /* user defined procedure call */ +| ID '(' ')' { $$ = tree1 (N_procedure_call, tree3 (N_ID, $1), NULL, NULL); } +| ID '(' argument_list ')' { $$ = tree1 (N_procedure_call, tree3 (N_ID, $1), $3, NULL); } +; + +procedure_definition: + DP ID '(' ')' '{' primary_procedure_list '}' { + $$ = tree1 (N_procedure_definition, tree3 (N_ID, $2), NULL, $6); + } +| DP ID '(' parameter_list ')' '{' primary_procedure_list '}' { + $$ = tree1 (N_procedure_definition, tree3 (N_ID, $2), $4, $7); + } +; + +parameter_list: + ID { $$ = tree3 (N_ID, $1); } +| parameter_list ',' ID { $$ = tree1 (N_parameter_list, $1, tree3 (N_ID, $3), NULL); } +; + +argument_list: + expression +| argument_list ',' expression { $$ = tree1 (N_argument_list, $1, $3, NULL); } +; + +primary_procedure_list: + primary_procedure +| primary_procedure_list primary_procedure { + $$ = tree1 (N_primary_procedure_list, $1, $2, NULL); + } +; + +expression: + expression '=' expression { $$ = tree1 (N_EQ, $1, $3, NULL); } +| expression '>' expression { $$ = tree1 (N_GT, $1, $3, NULL); } +| expression '<' expression { $$ = tree1 (N_LT, $1, $3, NULL); } +| expression '+' expression { $$ = tree1 (N_ADD, $1, $3, NULL); } +| expression '-' expression { $$ = tree1 (N_SUB, $1, $3, NULL); } +| expression '*' expression { $$ = tree1 (N_MUL, $1, $3, NULL); } +| expression '/' expression { $$ = tree1 (N_DIV, $1, $3, NULL); } +| '-' expression %prec UMINUS { $$ = tree1 (N_UMINUS, $2, NULL, NULL); } +| '(' expression ')' { $$ = $2; } +| ID { $$ = tree3 (N_ID, $1); } +| NUM { $$ = tree2 (N_NUM, $1); } +; ~~~ -The first six lines show that `program` is `statement` or `program` followed by `statement`. - -- Whenever `statement` is reduced to `program`, an action `node_top=$$=$1;` is executed. -- In the same way, whenever `program` followed by `statment is reduced to `program`, -`node_top=$$=tree1(N_program,$1,$2,NULL);` is executed. -- `node_top` is a static variable. -It points the top node of the tree. -- `$$` is a semantic value of the result, which is `program` in the example above. -The semantic value of `program` is a pointer to `node_t` type structure. -It was defined in the declaration section. -- `$1` is a semantic value of the first component, which is `statement` in the example. -The semantic value of `statement` is also a pointer to `node_t`. -- The function `tree1` generates tree node. - - - ### Epilogue + +The epilogue is written in C language and copied to the parser implementation file. +Generally, you can put anything into epilogue. +In the case of turtle interpreter, the runtime routine and some other functions are in the epilogue. + +#### Functions to generate tree nodes + +There are three functions, `tree1`, `tree2` and `tree3`. + +- `tree1` creates a node and sets the node type and pointers to its three children (NULL is possible). +- `tree2` creates a node and sets the node type and a value. +- `tree3` creates a node and sets the node type and a pointer to a string. + +Each function gets memories first and build a node on them. +The memories are inserted to the list. +They will be freed when runtime routine finishes. + +The three functions are called in the actions in the rules section. + +~~~C +/* Dynamically allocated memories are added to the single list. They will be freed in the finalize function. */ +GSList *list = NULL; + +node_t * +tree1 (int type, node_t *child1, node_t *child2, node_t *child3) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + child1(new_node) = child1; + child2(new_node) = child2; + child3(new_node) = child3; + return new_node; +} + +node_t * +tree2 (int type, double value) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + value(new_node) = value; + return new_node; +} + +node_t * +tree3 (int type, char *name) { + node_t *new_node; + + list = g_slist_prepend (list, g_malloc (sizeof (node_t))); + new_node = (node_t *) list->data; + new_node->type = type; + name(new_node) = name; + return new_node; +} +~~~ + +#### Symbol table + +Variables and user defined procedures are registered in a symbol table. +This table is a C array. +It should be replaced by more appropriate data structure with memory allocation in the future version + +- Variables are registered with its name and value. +- Procedures are registered with its name and a pointer to the node of the procedure. + +Therefore the table has the following fields. + +- type to identify variable or procedure +- name +- value or pointer to a node + +~~~C +#define MAX_TABLE_SIZE 100 +enum { + PROC, + VAR +}; + +typedef union _object_t object_t; +union _object_t { + node_t *node; + double value; +}; + +struct { + int type; + char *name; + object_t object; +} table[MAX_TABLE_SIZE]; +int tp; + +void +init_table (void) { + tp = 0; +} + +~~~ + +`init_table` initializes the table. +This must be called before any registrations. + +There are five functions to access the table, + +- `proc_install` installs a procedure. +- `var_install` installs a variable. +- `proc_lookup` looks up a procedure. If the procedure is found, it returns a pointer to the node. Otherwise it returns NULL. +- `var_lookup` looks up a variable. If the variable is found, it returns TRUE and sets the pointer (argument) to point the value. Otherwise it returns FALSE. +- `var_replace` replaces the value of a variable. If the variable hasn't registered yet, it installs the variable. + +~~~C +int +tbl_lookup (int type, char *name) { + int i; + + if (tp == 0) + return -1; + for (i=0; i= MAX_TABLE_SIZE) + runtime_error ("Symbol table overflow.\n"); + else if (tbl_lookup (type, name) >= 0) + runtime_error ("Name %s is already registered.\n", name); + else { + table[tp].type = type; + table[tp].name = name; + if (type == PROC) + table[tp++].object.node = object.node; + else + table[tp++].object.value = object.value; + } +} + +void +proc_install (char *name, node_t *node) { + object_t object; + object.node = node; + tbl_install (PROC, name, object); +} + +void +var_install (char *name, double value) { + object_t object; + object.value = value; + tbl_install (VAR, name, object); +} + +void +var_replace (char *name, double value) { + int i; + if ((i = tbl_lookup (VAR, name)) >= 0) + table[i].object.value = value; + else + var_install (name, value); +} + +node_t * +proc_lookup (char *name) { + int i; + if ((i = tbl_lookup (PROC, name)) < 0) + return NULL; + else + return table[i].object.node; +} + +gboolean +var_lookup (char *name, double *value) { + int i; + if ((i = tbl_lookup (VAR, name)) < 0) + return FALSE; + else { + *value = table[i].object.value; + return TRUE; + } +} +~~~ + +#### Stack for parameters and arguments + +Stack is a last-in first-out data structure. +It is shortened to LIFO. +Turtle uses a stack to keep parameters and arguments. +They are like `auto` class variables in C language. +They are pushed to the stack whenever the procedure is called. +LIFO structure is useful for recursive calls. + +Each element of the stack has name and value. + +~~~C +#define MAX_STACK_SIZE 500 +struct { + char *name; + double value; +} stack[MAX_STACK_SIZE]; +int sp, sp_biggest; + +void +init_stack (void) { + sp = sp_biggest = 0; +} +~~~ + +`sp` is a stack pointer. +It is an index of the array `stack` and it always points an element of the array to store the next data. +`sp_biggest` is the biggest number assigned to `sp`. +We can know the amount of elements used in the array during the runtime. +The purpose of the variable is to find appropriate `MAX_STACK_SIZE`. +It will be unnecessary in the future version if the stack is implemented with better data structure and memory allocation. + +The runtime routine push data to the stack when it executes a procedure call node. + +~~~ +dp drawline (angle, distance) { ... ... ... } +drawline (90, 100) +~~~ + +- The first line defines a procedure `drawline`. +The runtime routine stores the name `drawline` and the node of the procedure to the symbol table. +- The second line calls the procedure. +First, it looks for the procedure in the symbol table and gets its node. +Then it searches the node for the parameters and gets `angle` and `distance`. +- It pushes ("distance", 100.0) to the stack. +- It pushes ("angle", 90.0) to the stack. +- It pushes (NULL, 2.0) to the stack. +The number 2.0 is the number of parameters (or arguments). +It is used when the procedure returns. + +The following diagram shows the structure of the stack. +First, `procedure 1` is called. +The procedure has two parameters. +In the `procedure 1`, another procedure `procedure 2`, which has one parameter, is called. +And in the `procedure 2`, `procedure 3`, which has three parameters, is called. + +Programs push data to a stack from a low address memory to a high address memory. +In the following diagram, the lowest address is at the top and the highest address is at the bottom. +That is the order of the address. +However, "the top of the stack" is the last pushed data and "the bottom of the stack" is the first pushed data. +Therefore, "the top of the stack" is the bottom of the rectangle in the diagram and "the bottom of the stack" is the top of the rectangle. + +![Stack](../image/stack.png){width=6.64cm height=8.05cm} + +There are four functions to access the stack. + +- `stack_push` pushes data to the stack. +- `stack_lookup` searches the stack for the variable given its name as an argument. +It searches only the parameters of the latest procedure. +It returns TRUE and sets the argument `value` to point the value, if the variable has been found. +Otherwise it returns FALSE. +- `stack_replace` replaces the value of the variable in the stack. +If it successes, it returns TRUE. Otherwise returns FALSE. +- `stack_return` throws away the latest parameters. +The stack pointer goes back to the point before the latest procedure call so that it points to parameters of the previous called procedure. + +~~~C +void +stack_push (char *name, double value) { + if (sp >= MAX_STACK_SIZE) + runtime_error ("Stack overflow.\n"); + else { + stack[sp].name = name; + stack[sp++].value = value; + sp_biggest = sp > sp_biggest ? sp : sp_biggest; + } +} + +int +stack_search (char *name) { + int depth, i; + + if (sp == 0) + return -1; + depth = (int) stack[sp-1].value; + if (depth + 1 > sp) /* something strange */ + runtime_error ("Stack error.\n"); + for (i=0; i sp) /* something strange */ + runtime_error ("Stack error.\n"); + sp -= depth + 1; +} +~~~ + +#### Surface and cairo + +A global variable `surface` is shared by `turtleapplication.c` and `turtle.y`. +It is initialized in `turtleapplication.c`. + +The runtime routine has its own cairo context. +This is different from the cairo of GtkDrawingArea. +Runtime routine draws a shape on the `surface` with the cairo context. +After runtime routine returns to `run_cb`, the drawing function `draw_func` copies the `surface` to the surface in the GtkDrawingArea object. + +`turtle.y` has two functions `init_cairo` and `destroy_cairo`. + +- `init_cairo` initializes static variables and cairo context. +The variables keep pen status (up or down), direction, initial location, line width and color. +The size of the `surface` changes according to the size of the window. +Whenever a user drags and resizes the window, the `surface` is also resized. +`init_cairo` gets the size first and sets the initial location of the turtle (center of the surface) and the transformation matrix. +- `destroy_cairo` just destroys the cairo context. + +Turtle has its own coordinate. +The origin is at the center of the surface, and positive direction of x and y axes are right and up respectively. +But surfaces have its own coordinate. +Its origin is at the top-left corner of the surface and positive direction of x and y are right and down respectively. +A plane with the turtle's coordinate is called user space, which is the same as cairo's user space. +A plane with the surface's coordinate is called device space. + +Cairo provides a transformation which is an affine transformation. +It transforms a user-space coordinate (x, y) into a device-space coordinate (z, w). + +![transformation](../image/transformation.png){width=6.3cm height=2.04cm} + +`init_cairo` gets the width and height of the `surface` (See the program below). + +- The center of the surface is (0,0) with regard to the user-space coordinate and (width/2, height/2) with regard to the device-space coordinate. +- The positive direction of x axis in the two spaces are the same. So, (1,0) is transformed into (1+width/2,height/2). +- The positive direction of y axis in the two spaces are opposite. So, (0,1) is transformed into (width/2,-1+height/2). + +You can determine a, b, c, d, p and q by substituting the numbers above for x, y, z and w in the equation above. +The solution of the simultaneous equations is: + +~~~ +a = 1, b = 0, c = 0, d = -1, p = width/2, q = height/2 +~~~ + +Cairo provides a structure `cairo_matrix_t`. +`init_cairo` uses it and sets the cairo transformation (See the program below). +Once the matrix is set, the transformation always performs whenever `cairo_stroke` function is invoked. + +~~~C +/* status of the surface */ +static gboolean pen = TRUE; +static double angle = 90.0; /* angle starts from x axis and measured counterclockwise */ + /* Initially facing to the north */ +static double cur_x = 0.0; +static double cur_y = 0.0; +static double line_width = 2.0; + +struct color { + double red; + double green; + double blue; +}; +static struct color bc = {0.95, 0.95, 0.95}; /* white */ +static struct color fc = {0.0, 0.0, 0.0}; /* black */ + +/* cairo */ +static cairo_t *cr; +gboolean +init_cairo (void) { + int width, height; + pen = TRUE; + angle = 90.0; + cur_x = 0.0; + cur_y = 0.0; + line_width = 2.0; + bc.red = 0.95; bc.green = 0.95; bc.blue = 0.95; + fc.red = 0.0; fc.green = 0.0; fc.blue = 0.0; + + width = cairo_image_surface_get_width (surface); + height = cairo_image_surface_get_height (surface); + + cairo_matrix_t matrix; + matrix.xx = 1.0; matrix.xy = 0.0; matrix.x0 = (double) width / 2.0; + matrix.yx = 0.0; matrix.yy = -1.0; matrix.y0 = (double) height / 2.0; + if (surface) { + cr = cairo_create (surface); + cairo_transform (cr, &matrix); + cairo_set_source_rgb (cr, bc.red, bc.green, bc.blue); + cairo_paint (cr); + cairo_set_source_rgb (cr, fc.red, fc.green, fc.blue); + cairo_move_to (cr, cur_x, cur_y); + return TRUE; + } else + return FALSE; +} + +void +destroy_cairo () { + cairo_destroy (cr); +} +~~~ + +#### Eval function + +A function `eval` evaluates an expression and returns the value of the expression. +It calls itself recursively. +For example, if the node is `N_ADD`, then: + +1. Calls eval(child1(node)) and gets the value1. +2. Calls eval(child2(node)) and gets the value2. +3. Returns value1+value2. + +This is performed by a macro `calc` defined in the sixth line in the following program. + +~~~C +double +eval (node_t *node) { +double value = 0.0; + if (node == NULL) + runtime_error ("No expression to evaluate.\n"); +#define calc(op) eval (child1(node)) op eval (child2(node)) + switch (node->type) { + case N_EQ: + value = (double) calc(==); + break; + case N_GT: + value = (double) calc(>); + break; + case N_LT: + value = (double) calc(<); + break; + case N_ADD: + value = calc(+); + break; + case N_SUB: + value = calc(-); + break; + case N_MUL: + value = calc(*); + break; + case N_DIV: + if (eval (child2(node)) == 0.0) + runtime_error ("Division by zerp.\n"); + else + value = calc(/); + break; + case N_UMINUS: + value = -(eval (child1(node))); + break; + case N_ID: + if (! (stack_lookup (name(node), &value)) && ! var_lookup (name(node), &value) ) + runtime_error ("Variable %s not defined.\n", name(node)); + break; + case N_NUM: + value = value(node); + break; + default: + runtime_error ("Illegal expression.\n"); + } + return value; +} +~~~ + +#### Execute function + +Primary procedures and procedure definitions are analyzed and carried out by a function `execute`. +It doesn't return any values. +It calls itself recursively. +The process of `N_RT` and `N_procedure_call` is complicated. +It will explained after the following program. +Other parts are not so difficult. +Read the program below carefully so that you will understand the process. + +~~~C +/* procedure - return status */ +static int proc_level = 0; +static int ret_level = 0; + +void +execute (node_t *node) { + double d, x, y; + char *name; + int n, i; + + if (node == NULL) + runtime_error ("Node is NULL.\n"); + if (proc_level > ret_level) + return; + switch (node->type) { + case N_program: + execute (child1(node)); + execute (child2(node)); + break; + case N_PU: + pen = FALSE; + break; + case N_PD: + pen = TRUE; + break; + case N_PW: + line_width = eval (child1(node)); /* line width */ + break; + case N_FD: + d = eval (child1(node)); /* distance */ + x = d * cos (angle*M_PI/180); + y = d * sin (angle*M_PI/180); + /* initialize the current point = start point of the line */ + cairo_move_to (cr, cur_x, cur_y); + cur_x += x; + cur_y += y; + cairo_set_line_width (cr, line_width); + cairo_set_source_rgb (cr, fc.red, fc.green, fc.blue); + if (pen) + cairo_line_to (cr, cur_x, cur_y); + else + cairo_move_to (cr, cur_x, cur_y); + cairo_stroke (cr); + break; + case N_TR: + angle -= eval (child1(node)); + for (; angle < 0; angle += 360.0); + for (; angle>360; angle -= 360.0); + break; + case N_BC: + bc.red = eval (child1(node)); + bc.green = eval (child2(node)); + bc.blue = eval (child3(node)); +#define fixcolor(c) c = c < 0 ? 0 : (c > 1 ? 1 : c) + fixcolor (bc.red); + fixcolor (bc.green); + fixcolor (bc.blue); + /* clear the shapes and set the background color */ + cairo_set_source_rgb (cr, bc.red, bc.green, bc.blue); + cairo_paint (cr); + break; + case N_FC: + fc.red = eval (child1(node)); + fc.green = eval (child2(node)); + fc.blue = eval (child3(node)); + fixcolor (fc.red); + fixcolor (fc.green); + fixcolor (fc.blue); + break; + case N_ASSIGN: + name = name(child1(node)); + d = eval (child2(node)); + if (! stack_replace (name, d)) /* First, tries to replace the value in the stack (parameter).*/ + var_replace (name, d); /* If the above fails, tries to replace the value in the table. If the variable isn't in the table, installs it, */ + break; + case N_IF: + if (eval (child1(node))) + execute (child2(node)); + break; + case N_RT: + ret_level--; + break; + case N_RS: + pen = TRUE; + angle = 90.0; + cur_x = 0.0; + cur_y = 0.0; + line_width = 2.0; + fc.red = 0.0; fc.green = 0.0; fc.blue = 0.0; + /* To change background color, use bc. */ + break; + case N_procedure_call: + name = name(child1(node)); +node_t *proc = proc_lookup (name); + if (! proc) + runtime_error ("Procedure %s not defined.\n", name); + if (strcmp (name, name(child1(proc))) != 0) + runtime_error ("Unexpected error. Procedure %s is called, but invoked procedure is %s.\n", name, name(child1(proc))); +/* make tuples (parameter (name), argument (value)) and push them to the stack */ +node_t *param_list; +node_t *arg_list; + param_list = child2(proc); + arg_list = child2(node); + if (param_list == NULL) { + if (arg_list == NULL) { + stack_push (NULL, 0.0); /* number of argument == 0 */ + } else + runtime_error ("Procedure %s has different number of argument and parameter.\n", name); + }else { +/* Don't change the stack until finish evaluating the arguments. */ +#define TEMP_STACK_SIZE 20 + char *temp_param[TEMP_STACK_SIZE]; + double temp_arg[TEMP_STACK_SIZE]; + n = 0; + for (; param_list->type == N_parameter_list; param_list = child1(param_list)) { + if (arg_list->type != N_argument_list) + runtime_error ("Procedure %s has different number of argument and parameter.\n", name); + if (n >= TEMP_STACK_SIZE) + runtime_error ("Too many parameters. the number must be %d or less.\n", TEMP_STACK_SIZE); + temp_param[n] = name(child2(param_list)); + temp_arg[n] = eval (child2(arg_list)); + arg_list = child1(arg_list); + ++n; + } + if (param_list->type == N_ID && arg_list -> type != N_argument_list) { + temp_param[n] = name(param_list); + temp_arg[n] = eval (arg_list); + if (++n >= TEMP_STACK_SIZE) + runtime_error ("Too many parameters. the number must be %d or less.\n", TEMP_STACK_SIZE); + temp_param[n] = NULL; + temp_arg[n] = (double) n; + ++n; + } else + runtime_error ("Unexpected error.\n"); + for (i = 0; i < n; ++i) + stack_push (temp_param[i], temp_arg[i]); + } + ret_level = ++proc_level; + execute (child3(proc)); + ret_level = --proc_level; + stack_return (); + break; + case N_procedure_definition: + name = name(child1(node)); + proc_install (name, node); + break; + case N_primary_procedure_list: + execute (child1(node)); + execute (child2(node)); + break; + default: + runtime_error ("Unknown statement.\n"); + } +} +~~~ + +A node `N_procedure_call` is created by the parser when it has found a user defined procedure call. +The procedure has been defined in the prior statement. +Suppose the parser reads the following example code. + +~~~ +dp drawline (angle, distance) { + tr angle + fd distance +} +drawline (90, 100) +drawline (90, 100) +drawline (90, 100) +drawline (90, 100) +~~~ + +This example draws a square. + +When The parser reads the lines from one to four, it creates nodes like this: + +![Nodes of drawline](../image/tree2.png){width=10cm height=6cm} + +Runtime routine just stores the procedure to the symbol table with its name and node. + +![Symbol table](../image/table.png){width=10cm height=5cm} + +When the parser reads the fifth line in the example, it creates nodes like this: + +![Nodes of procedure call](../image/proc_call.png){width=10cm height=5cm} + +When the runtime routine meets `N_procedure_call` node, it behaves like this: + +1. Searches the symbol table for the procedure by the name. +2. Gets pointers to the node to parameters and the node to the body. +3. Creates a temporary stack. +Makes a tuple of each parameter name and argument value. +Pushes the tuples into the stack, and (NULL, number of parameters) finally. +If no error occurs, copies them from the temporary stack to the parameter stack. +4. Increases `prc_level` by one. +Sets `ret_level` to the same value as `proc_level`. +`proc_level` is zero when runtime routine runs on the main routine. +If it goes into a procedure, `proc_level` increases by one. +Therefore, `proc_level` is the depth of the procedure call. +`ret_level` is the level to return. +If it is the same as `proc_level`, runtime routine executes commands in order of the commands in the procedure. +If it is smaller than `proc_level`, runtime routine doesn't execute commands until it becomes the same level as `proc_level`. +`ret_level` is used to return the procedure. +5. Executes the node of the body of the procedure. +6. Decreases `proc_level` by one. +Sets `ret_level` to the same value as `proc_level`. +Calls `stack_return`. + +When the runtime routine meets `N_RT` node, it decreases `ret_level` by one so that the following commands in the procedure are ignored by the runtime routine. + +#### Runtime entry and error functions + +A function `run` is the entry of the runtime routine. +A function `runtime_error` reports an error occurred during the runtime routine runs. +(Errors which occur during the parsing are called syntax error and reported by `yyerror`.) +After `runtime_error` reports an error, it stops the command execution and goes back to `run` to exit. + +Setjmp and longjmp functions are used. +They are declared in ``. +`setjmp (buf)` saves state information in `buf` and returns zero. +`longjmp(buf, 1)` restores the state information from `buf` and returns `1` (the second argument). +Because the information is the status at the time `setjmp` is called, so longjmp resumes the execution at the next of setjmp function call. +In the following program, longjmp resumes at the assignment to the variable `i`. +When setjmp is called, 0 is assigned to `i` and `execute(node_top)` is called. +On the other hand, when longjmp is called, 1 is assigned to `i` and `execute(node_top)` is not called.. + +`g_slist_free_full` frees all the allocated memories. + +~~~C +static jmp_buf buf; + +void +run (void) { + int i; + + if (! init_cairo()) { + g_print ("Cairo not initialized.\n"); + return; + } + init_table(); + init_stack(); + ret_level = proc_level = 1; + i = setjmp (buf); + if (i == 0) + execute(node_top); + /* else ... get here by calling longjmp */ + destroy_cairo (); + g_slist_free_full (g_steal_pointer (&list), g_free); +} + +/* format supports only %s, %f and %d */ +static void +runtime_error (char *format, ...) { + va_list args; + char *f; + char b[3]; + char *s; + double v; + int i; + + va_start (args, format); + for (f = format; *f; f++) { + if (*f != '%') { + b[0] = *f; + b[1] = '\0'; + g_print ("%s", b); + continue; + } + switch (*++f) { + case 's': + s = va_arg(args, char *); + g_print ("%s", s); + break; + case 'f': + v = va_arg(args, double); + g_print("%f", v); + break; + case 'd': + i = va_arg(args, int); + g_print("%d", i); + break; + default: + b[0] = '%'; + b[1] = *f; + b[2] = '\0'; + g_print ("%s", b); + break; + } + } + va_end (args); + + longjmp (buf, 1); +} + +~~~ + +A function `runtime_error` has a variable-length argument list. + +~~~C +void runtime_error (char *format, ...) +~~~ + +This is implemented with `` header file. +The `va_list` type variable `args` will refer to each argument in turn. +A function `va_start` initializes `args`. +A function `va_arg` returns an argument and moves the reference of `args` to the next. +A function `va_end` cleans up everything necessary at the end. + +The function `runtime_error` has a similar format of printf standard function. +But its format has only `%s`, `%f` and `%d`. + +The functions declared in `` and `` are explained in the very famous book "The C programming language" written by Brian Kernighan and Dennis Ritchie. +I referred to the book to write the program above. + +The program `turtle` is unsophisticated and unpolished. +If you want to make your own language, you need to know more and more. +I don't know any good textbook about compilers and interpreters. +If you know a good book, please let me know. + +However, the following information is very useful (but old). + +- Bison documentation +- Flex documentation +- Software tools written by Brian W. Kernighan & P. J. Plauger (1976) +- Unix programming environment written by Brian W. Kernighan and Rob Pike (1984) +- Source code of a language, for example, ruby. + +Lately, lots of source codes are in the internet. +Maybe reading source codes are the most useful for programmers. + diff --git a/src/turtle/example/tree2.txt b/src/turtle/example/tree2.txt index 15211ae..7b0550b 100644 --- a/src/turtle/example/tree2.txt +++ b/src/turtle/example/tree2.txt @@ -15,4 +15,8 @@ dp tree2 (n, s) { tr 180 } +tr 180 +pu +fd 100 +tr 180 tree2 (6, 100) diff --git a/src/turtle/turtle.h b/src/turtle/turtle.h index 997411d..629614f 100644 --- a/src/turtle/turtle.h +++ b/src/turtle/turtle.h @@ -7,7 +7,7 @@ /* The following line defines 'debug' so that debug information is printed during the run time. */ /* However it makes the program slow. */ /* If you don't want to see such information, remove the line. */ -/* #define debug 1 */ +/*#define debug 1*/ extern cairo_surface_t *surface; diff --git a/src/turtle/turtle.y b/src/turtle/turtle.y index 7ad4538..b4c9f87 100644 --- a/src/turtle/turtle.y +++ b/src/turtle/turtle.y @@ -91,7 +91,6 @@ %code requires { int yylex (void); - void init_parse (void); int yyparse (void); void run (void); @@ -101,9 +100,7 @@ int type; union { struct { - node_t *child1; - node_t *child2; - node_t *child3; + node_t *child1, *child2, *child3; } child; char *name; double value; @@ -241,7 +238,7 @@ expression: /* Declaration of the runtime error function */ static void runtime_error (char *format, ...); -/* Dinamically allocated memories are added to the single list. They will be freed in the finalize function. */ +/* Dynamically allocated memories are added to the single list. They will be freed in the finalize function. */ GSList *list = NULL; node_t * @@ -283,7 +280,7 @@ tree3 (int type, char *name) { * They are stored in a single symbol table. * The names and types are the keys to search the corresponding objects from the table. */ -#define MAX_TABLE_SIZE 50 +#define MAX_TABLE_SIZE 100 enum { PROC, VAR @@ -300,13 +297,23 @@ struct { char *name; object_t object; } table[MAX_TABLE_SIZE]; -int tp, tp_biggest; - -int tbl_lookup (int type, char *name); +int tp; void init_table (void) { - tp = tp_biggest = 0; + tp = 0; +} + +int +tbl_lookup (int type, char *name) { + int i; + + if (tp == 0) + return -1; + for (i=0; i tp_biggest ? tp : tp_biggest; } } @@ -340,18 +346,6 @@ var_install (char *name, double value) { tbl_install (VAR, name, object); } -int -tbl_lookup (int type, char *name) { - int i; - - if (tp == 0) - return -1; - for (i=0; i sp) /* something strange */ runtime_error ("Stack error.\n"); - sp -= depth + 1; + sp -= (int) depth + 1; } #ifdef debug @@ -498,24 +492,24 @@ show_stack (void) { #endif /* procedure - return status */ -int proc_level = 0; -int ret_level = 0; +static int proc_level = 0; +static int ret_level = 0; /* status of the surface */ -gboolean pen = TRUE; -double angle = 90.0; /* angle starts from x axis and measured counterclockwise */ +static gboolean pen = TRUE; +static double angle = 90.0; /* angle starts from x axis and measured counterclockwise */ /* Initially facing to the north */ -double cur_x = 0.0; -double cur_y = 0.0; -double line_width = 2.0; +static double cur_x = 0.0; +static double cur_y = 0.0; +static double line_width = 2.0; struct color { double red; double green; double blue; }; -struct color bc = {0.95, 0.95, 0.95}; /* white */ -struct color fc = {0.0, 0.0, 0.0}; /* black */ +static struct color bc = {0.95, 0.95, 0.95}; /* white */ +static struct color fc = {0.0, 0.0, 0.0}; /* black */ /* cairo */ static cairo_t *cr; @@ -589,7 +583,7 @@ g_print ("eval: node type is %s.\n", node_type_table[node->type]); if (eval (child2(node)) == 0.0) runtime_error ("Division by zerp.\n"); else - value = calc(/); + value = calc (/); break; case N_UMINUS: value = -(eval (child1(node))); @@ -708,8 +702,8 @@ g_print ("fc: Foreground color is (%f, %f, %f).\n", fc.red, fc.green, fc.blue); case N_ASSIGN: name = name(child1(node)); d = eval (child2(node)); - if (! stack_replace (name, d)) /* First, try to assign the value to the parameter. If it fails, next step is assigning it to the symbol table */ - var_replace (name, d); /* If the name of the variable in the table, replace the value. Otherwise, install the variable, */ + if (! stack_replace (name, d)) /* First, tries to replace the value in the stack (parameter).*/ + var_replace (name, d); /* If the above fails, tries to replace the value in the table. If the variable isn't in the table, installs it, */ break; case N_IF: if (eval (child1(node))) @@ -725,7 +719,7 @@ g_print ("fc: Foreground color is (%f, %f, %f).\n", fc.red, fc.green, fc.blue); cur_y = 0.0; line_width = 2.0; fc.red = 0.0; fc.green = 0.0; fc.blue = 0.0; - /* To change backgroundcolor, use bc. */ + /* To change background color, use bc. */ break; case N_procedure_call: name = name(child1(node)); @@ -776,7 +770,7 @@ node_t *arg_list; ret_level = ++proc_level; execute (child3(proc)); ret_level = --proc_level; - stack_turn_back (); + stack_return (); break; case N_procedure_definition: name = name(child1(node)); @@ -793,17 +787,9 @@ node_t *arg_list; static jmp_buf buf; -void -init_parse (void) { - node_top = NULL; -} - void run (void) { int i; -#ifdef debug -if (node_top == NULL) g_print ("run: node_top is NULL.\n"); else g_print ("run: node_top is NOT NULL.\n"); -#endif if (! init_cairo()) { g_print ("Cairo not initialized.\n"); @@ -819,10 +805,9 @@ if (node_top == NULL) g_print ("run: node_top is NULL.\n"); else g_print ("run: #ifdef debug /* statistics */ g_print ("------ Statistics ------\n"); - g_print ("The biggest depth of the symbol table is %d.\n", tp_biggest); + g_print ("The biggest depth of the symbol table is %d.\n", tp); g_print ("The biggest depth of the stack is %d.\n", sp_biggest); #endif - ret_level = proc_level = 0; /* This is not necessary, because this fuction is going to end soon. */ destroy_cairo (); g_slist_free_full (g_steal_pointer (&list), g_free); } diff --git a/src/turtle/turtleapplication.c b/src/turtle/turtleapplication.c index d35a724..ed5a80b 100644 --- a/src/turtle/turtleapplication.c +++ b/src/turtle/turtleapplication.c @@ -24,11 +24,7 @@ run_cb (GtkWidget *btnr) { contents = gtk_text_buffer_get_text (tb, &start_iter, &end_iter, FALSE); if (surface) { init_flex (contents); - init_parse (); stat = yyparse (); -#ifdef debug - g_print ("yyparse returned %d.\n", stat); -#endif if (stat == 0) /* No error */ { run (); }