From f49b184a093ab5f653ac36ccc4939c45515a2f4b Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Sat, 24 Oct 2026 15:23:20 -0700 Subject: Move combined chapter 25 baseline to chapter 28b --- chapter25/docs/25-grammar.ja.md | 175 -------- chapter25/docs/25-grammar.md | 175 -------- chapter25/docs/Makefile | 12 - chapter25/docs/examples/A_helloWorld.smp | 2 - chapter25/docs/examples/BubbleSort.smp | 36 -- chapter25/docs/examples/Capitalize.smp | 22 - chapter25/docs/examples/Dijkstra.smp | 72 ---- chapter25/docs/examples/FileIO.smp | 50 --- chapter25/docs/font-awesome-4.7.0.zip | Bin 669808 -> 0 bytes chapter25/docs/ifg_trim.pdf | Bin 155190 -> 0 bytes chapter25/docs/lattice.gv | 203 --------- chapter25/docs/lattice.svg | 691 ------------------------------- chapter25/docs/lattice2.gv | 85 ---- chapter25/docs/lattice2.svg | 260 ------------ chapter25/docs/pardoe.docx | Bin 22583 -> 0 bytes chapter25/docs/webtcp.min.js | 65 --- 16 files changed, 1848 deletions(-) delete mode 100644 chapter25/docs/25-grammar.ja.md delete mode 100644 chapter25/docs/25-grammar.md delete mode 100644 chapter25/docs/Makefile delete mode 100644 chapter25/docs/examples/A_helloWorld.smp delete mode 100644 chapter25/docs/examples/BubbleSort.smp delete mode 100644 chapter25/docs/examples/Capitalize.smp delete mode 100644 chapter25/docs/examples/Dijkstra.smp delete mode 100644 chapter25/docs/examples/FileIO.smp delete mode 100644 chapter25/docs/font-awesome-4.7.0.zip delete mode 100644 chapter25/docs/ifg_trim.pdf delete mode 100644 chapter25/docs/lattice.gv delete mode 100644 chapter25/docs/lattice.svg delete mode 100644 chapter25/docs/lattice2.gv delete mode 100644 chapter25/docs/lattice2.svg delete mode 100644 chapter25/docs/pardoe.docx delete mode 100644 chapter25/docs/webtcp.min.js (limited to 'chapter25/docs') diff --git a/chapter25/docs/25-grammar.ja.md b/chapter25/docs/25-grammar.ja.md deleted file mode 100644 index 9e9fb820..00000000 --- a/chapter25/docs/25-grammar.ja.md +++ /dev/null @@ -1,175 +0,0 @@ -# 第25章の文法 - -[English](25-grammar.md) | 日本語 - -```antlrv4 -grammar SimpleLanguage; - -// Name lookup, assignable operands, type compatibility, and access permissions -// are checked by the compiler in addition to these syntax rules. -// A file is a compilation unit; its path supplies its namespace. -// Qualified names resolve nested types and other units without an import keyword. -program : statement* EOF ; - -block : '{' statement* '}' ; - -statement - : block - | returnStatement - | ifStatement - | whileStatement - | forStatement - | breakStatement - | continueStatement - | structDeclaration - | declaration ';' - | assignment ';' - | ';' - ; - -returnStatement : 'return' assignment ';' ; -ifStatement : 'if' '(' assignment ')' statement ('else' statement)? ; -whileStatement : 'while' '(' assignment ')' statement ; -breakStatement : 'break' ';' ; -continueStatement : 'continue' ';' ; - -forStatement - : 'for' '(' (declaration | assignment)? ';' assignment? ';' assignment? ')' statement - ; - -structDeclaration : 'struct' IDENTIFIER '{' structMember* '}' ';' ; -structMember : constructorDeclaration | methodDeclaration | statement ; - -// The constructor name must match the enclosing struct's name. -constructorDeclaration : 'new' IDENTIFIER '=' functionExpression ';' ; - -// A method is an ordinary fixed function binding in a struct definition. -// The compiler supplies self; it is not written in parameterList. -// Function types and expressions both receive their implicit receiver here. -methodDeclaration : 'val' bindingModifier? IDENTIFIER '=' functionExpression ';' ; - -declaration : declarationType binding (',' binding)* ; -declarationType : type | 'var' | 'val' ; -binding : bindingModifier? IDENTIFIER ('=' initializer)? ; -bindingModifier : '!' | '~' ; -// A declaration initializer consisting of the string "C" declares an extern -// symbol: a function, or explicit numeric native storage. Ordinary strings -// elsewhere are array-valued expressions. -initializer : assignment ; - -// The prefix qualifies the named struct reference, not an enclosing array. -// Each [] / [~] suffix qualifies its own array layer. ? requires a reference. -type - : functionType - | primitiveType typeSuffix* - | accessModifier? typeName typeSuffix* - ; -accessModifier : '!' | '~' ; -typeSuffix : '?' | '[]' | '[~]' ; -typeName : IDENTIFIER ('.' IDENTIFIER)* ; - -primitiveType - : 'int' | 'i8' | 'i16' | 'i32' | 'i64' - | 'u1' | 'u8' | 'u16' | 'u32' | 'byte' | 'bool' - | 'flt' | 'f32' | 'f64' - ; - -assignment : expression (assignmentOperator assignment)? ; -assignmentOperator - : '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' - | '<<=' | '>>=' | '>>>=' - ; - -expression : logicalExpression ('?' assignment (':' assignment)?)? ; - -// Both logical operators short-circuit and associate to the right here. -logicalExpression : bitwiseExpression (('&&' | '||') logicalExpression)? ; - -bitwiseExpression - : equalityExpression (('&' | '|' | '^') equalityExpression)* - ; - -equalityExpression : comparisonExpression (('==' | '!=') comparisonExpression)* ; - -// Chained comparisons test adjacent operands and short-circuit. A chain must -// keep its direction; equality has lower precedence and does not join a chain. -comparisonExpression - : shiftExpression - ( (('<' | '<=') shiftExpression)+ | (('>' | '>=') shiftExpression)+ )? - ; - -shiftExpression - : additiveExpression (('<<' | '>>' | '>>>') additiveExpression)* - ; - -additiveExpression - : multiplicativeExpression (('+' | '-') multiplicativeExpression)* - ; - -multiplicativeExpression - : unaryExpression (('*' | '/') unaryExpression)* - ; - -unaryExpression - : ('-' | '!') unaryExpression - | updateOperator IDENTIFIER - | postfixExpression - ; - -// Prefix updates require a local name; postfix updates also allow fields -// and array elements. All updates require an assignable operand. -updateOperator : '++' | '--' ; -postfixExpression : primaryExpression postfixSuffix* updateOperator? ; -postfixSuffix : '.' IDENTIFIER | '[' assignment ']' | '#' | callSuffix | methodCallSuffix ; - -// For a fixed function-valued member, object.name(args) passes object as self. -// This overlaps ordinary field selection followed by a call syntactically; -// name/type resolution determines which call form applies. -methodCallSuffix : '.' IDENTIFIER callSuffix ; - -primaryExpression - : INTEGER_LITERAL - | FLOAT_LITERAL - | STRING_LITERAL - | CHARACTER_LITERAL - | 'true' - | 'false' - | 'null' - | IDENTIFIER - | '(' assignment ')' - | newExpression - | functionExpression - ; - -// A function is an expression bound with an ordinary declaration. -// Its last statement supplies the implicit result; return can exit earlier. -functionExpression : '{' parameterList? '->' statement* '}' ; -parameterList : (parameter ','?)+ ; -parameter : type bindingModifier? IDENTIFIER ; - -// Function types have unnamed, space-separated argument types. -// {int} is the zero-argument type; its function expression still uses ->. -functionType - : '{' type+ '->' type '}' '?'? - | '{' type '}' '?'? - ; - -callSuffix : '(' argumentList? ')' ; -argumentList : assignment (',' assignment)* ','? ; - -// Allocation invokes the declared constructor; inline initializer blocks from -// earlier chapters are replaced by constructor arguments. -newExpression : 'new' type ('[' assignment ']' | callSuffix)? ; - -INTEGER_LITERAL : '0' | [1-9] DIGIT* ; -FLOAT_LITERAL : DIGIT+ ('.' DIGIT* ('e' DIGIT+)? | 'e' '-'? DIGIT+) ; -STRING_LITERAL : '"' (ESCAPE | ~["\\])* '"' ; -CHARACTER_LITERAL : '\'' (ESCAPE | ~['\\]) '\'' ; -fragment ESCAPE : '\\' [0ntr\\'"] ; -IDENTIFIER : NON_DIGIT (NON_DIGIT | DIGIT)* ; -fragment NON_DIGIT : [a-zA-Z_] ; -fragment DIGIT : [0-9] ; -WHITESPACE : [ \t\r\n]+ -> skip ; -LINE_COMMENT : '//' ~[\r\n]* -> skip ; -BLOCK_COMMENT : '/*' .*? '*/' -> skip ; -``` diff --git a/chapter25/docs/25-grammar.md b/chapter25/docs/25-grammar.md deleted file mode 100644 index 065cf051..00000000 --- a/chapter25/docs/25-grammar.md +++ /dev/null @@ -1,175 +0,0 @@ -# Grammar for Chapter 25 - -English | [日本語](25-grammar.ja.md) - -```antlrv4 -grammar SimpleLanguage; - -// Name lookup, assignable operands, type compatibility, and access permissions -// are checked by the compiler in addition to these syntax rules. -// A file is a compilation unit; its path supplies its namespace. -// Qualified names resolve nested types and other units without an import keyword. -program : statement* EOF ; - -block : '{' statement* '}' ; - -statement - : block - | returnStatement - | ifStatement - | whileStatement - | forStatement - | breakStatement - | continueStatement - | structDeclaration - | declaration ';' - | assignment ';' - | ';' - ; - -returnStatement : 'return' assignment ';' ; -ifStatement : 'if' '(' assignment ')' statement ('else' statement)? ; -whileStatement : 'while' '(' assignment ')' statement ; -breakStatement : 'break' ';' ; -continueStatement : 'continue' ';' ; - -forStatement - : 'for' '(' (declaration | assignment)? ';' assignment? ';' assignment? ')' statement - ; - -structDeclaration : 'struct' IDENTIFIER '{' structMember* '}' ';' ; -structMember : constructorDeclaration | methodDeclaration | statement ; - -// The constructor name must match the enclosing struct's name. -constructorDeclaration : 'new' IDENTIFIER '=' functionExpression ';' ; - -// A method is an ordinary fixed function binding in a struct definition. -// The compiler supplies self; it is not written in parameterList. -// Function types and expressions both receive their implicit receiver here. -methodDeclaration : 'val' bindingModifier? IDENTIFIER '=' functionExpression ';' ; - -declaration : declarationType binding (',' binding)* ; -declarationType : type | 'var' | 'val' ; -binding : bindingModifier? IDENTIFIER ('=' initializer)? ; -bindingModifier : '!' | '~' ; -// A declaration initializer consisting of the string "C" declares an extern -// symbol: a function, or explicit numeric native storage. Ordinary strings -// elsewhere are array-valued expressions. -initializer : assignment ; - -// The prefix qualifies the named struct reference, not an enclosing array. -// Each [] / [~] suffix qualifies its own array layer. ? requires a reference. -type - : functionType - | primitiveType typeSuffix* - | accessModifier? typeName typeSuffix* - ; -accessModifier : '!' | '~' ; -typeSuffix : '?' | '[]' | '[~]' ; -typeName : IDENTIFIER ('.' IDENTIFIER)* ; - -primitiveType - : 'int' | 'i8' | 'i16' | 'i32' | 'i64' - | 'u1' | 'u8' | 'u16' | 'u32' | 'byte' | 'bool' - | 'flt' | 'f32' | 'f64' - ; - -assignment : expression (assignmentOperator assignment)? ; -assignmentOperator - : '=' | '+=' | '-=' | '*=' | '/=' | '&=' | '|=' | '^=' - | '<<=' | '>>=' | '>>>=' - ; - -expression : logicalExpression ('?' assignment (':' assignment)?)? ; - -// Both logical operators short-circuit and associate to the right here. -logicalExpression : bitwiseExpression (('&&' | '||') logicalExpression)? ; - -bitwiseExpression - : equalityExpression (('&' | '|' | '^') equalityExpression)* - ; - -equalityExpression : comparisonExpression (('==' | '!=') comparisonExpression)* ; - -// Chained comparisons test adjacent operands and short-circuit. A chain must -// keep its direction; equality has lower precedence and does not join a chain. -comparisonExpression - : shiftExpression - ( (('<' | '<=') shiftExpression)+ | (('>' | '>=') shiftExpression)+ )? - ; - -shiftExpression - : additiveExpression (('<<' | '>>' | '>>>') additiveExpression)* - ; - -additiveExpression - : multiplicativeExpression (('+' | '-') multiplicativeExpression)* - ; - -multiplicativeExpression - : unaryExpression (('*' | '/') unaryExpression)* - ; - -unaryExpression - : ('-' | '!') unaryExpression - | updateOperator IDENTIFIER - | postfixExpression - ; - -// Prefix updates require a local name; postfix updates also allow fields -// and array elements. All updates require an assignable operand. -updateOperator : '++' | '--' ; -postfixExpression : primaryExpression postfixSuffix* updateOperator? ; -postfixSuffix : '.' IDENTIFIER | '[' assignment ']' | '#' | callSuffix | methodCallSuffix ; - -// For a fixed function-valued member, object.name(args) passes object as self. -// This overlaps ordinary field selection followed by a call syntactically; -// name/type resolution determines which call form applies. -methodCallSuffix : '.' IDENTIFIER callSuffix ; - -primaryExpression - : INTEGER_LITERAL - | FLOAT_LITERAL - | STRING_LITERAL - | CHARACTER_LITERAL - | 'true' - | 'false' - | 'null' - | IDENTIFIER - | '(' assignment ')' - | newExpression - | functionExpression - ; - -// A function is an expression bound with an ordinary declaration. -// Its last statement supplies the implicit result; return can exit earlier. -functionExpression : '{' parameterList? '->' statement* '}' ; -parameterList : (parameter ','?)+ ; -parameter : type bindingModifier? IDENTIFIER ; - -// Function types have unnamed, space-separated argument types. -// {int} is the zero-argument type; its function expression still uses ->. -functionType - : '{' type+ '->' type '}' '?'? - | '{' type '}' '?'? - ; - -callSuffix : '(' argumentList? ')' ; -argumentList : assignment (',' assignment)* ','? ; - -// Allocation invokes the declared constructor; inline initializer blocks from -// earlier chapters are replaced by constructor arguments. -newExpression : 'new' type ('[' assignment ']' | callSuffix)? ; - -INTEGER_LITERAL : '0' | [1-9] DIGIT* ; -FLOAT_LITERAL : DIGIT+ ('.' DIGIT* ('e' DIGIT+)? | 'e' '-'? DIGIT+) ; -STRING_LITERAL : '"' (ESCAPE | ~["\\])* '"' ; -CHARACTER_LITERAL : '\'' (ESCAPE | ~['\\]) '\'' ; -fragment ESCAPE : '\\' [0ntr\\'"] ; -IDENTIFIER : NON_DIGIT (NON_DIGIT | DIGIT)* ; -fragment NON_DIGIT : [a-zA-Z_] ; -fragment DIGIT : [0-9] ; -WHITESPACE : [ \t\r\n]+ -> skip ; -LINE_COMMENT : '//' ~[\r\n]* -> skip ; -BLOCK_COMMENT : '/*' .*? '*/' -> skip ; -``` diff --git a/chapter25/docs/Makefile b/chapter25/docs/Makefile deleted file mode 100644 index 12659b8f..00000000 --- a/chapter25/docs/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -GV := $(wildcard *.gv) -SVG := $(patsubst %.gv,%.svg,$(GV)) - -.PHONY: all -all: $(SVG) - -%.svg: %.gv - dot -Tsvg $< > $@ - -.PHONY: clean -clean: - @rm -f $(SVG) diff --git a/chapter25/docs/examples/A_helloWorld.smp b/chapter25/docs/examples/A_helloWorld.smp deleted file mode 100644 index 4ed6abdf..00000000 --- a/chapter25/docs/examples/A_helloWorld.smp +++ /dev/null @@ -1,2 +0,0 @@ -sys.io.p("Hello, World!\n"); -return 0; diff --git a/chapter25/docs/examples/BubbleSort.smp b/chapter25/docs/examples/BubbleSort.smp deleted file mode 100644 index ca6906b5..00000000 --- a/chapter25/docs/examples/BubbleSort.smp +++ /dev/null @@ -1,36 +0,0 @@ - -// An implementation of -// https://sampleprograms.io/projects/bubble-sort/ -// -// Bubble sort, with reading (parsing) and writing (formatting) the data. - -val sort = { !sys.aryi64 nums -> - sys.aryi64?! more = nums; - while( more ) { - more = null; - for( var i = 0; i < nums.len-1; i++ ) - if( nums.buf[i] > nums.buf[i+1] ) - more = nums.swap(i,i+1); - } -}; - -// Read one process argument of the form "[ 4, 3, 2, 1]" and print it sorted. -// args[0] is the executable name, as with native C argc/argv. -val main = { u8[~][] args -> - val usage = { -> - sys.io.p("Usage: please provide a list of at least two integers to sort in the format \"[1, 2, 3, 4, 5]\"\n"); - return 0; - }; - if( args# != 2 ) return usage(); - - var nums = sys.aryi64.parseAryI64(args[1]); - if( !nums ) return usage(); - if( nums.len < 2 ) return usage(); - - // Bubble sort array of integers - sort(nums); - - // Print the same bracketed array-list format accepted as input. - nums.str().add('\n').write(1); - return 0; -}; diff --git a/chapter25/docs/examples/Capitalize.smp b/chapter25/docs/examples/Capitalize.smp deleted file mode 100644 index 8e31c18f..00000000 --- a/chapter25/docs/examples/Capitalize.smp +++ /dev/null @@ -1,22 +0,0 @@ - -// An implementation of -// https://sampleprograms.io/projects/capitalize/ - -val main = { u8[~][] args -> - if( args# > 2 ) { - sys.io.p("Use quotes around multiple strings.\n"); - return 0; - } - if( args# != 2 || args[1]# == 0 ) { - sys.io.p("Usage: please provide a string\n"); - return 0; - } - - u8[~] input = args[1]; - var output = new u8[input# + 1]; - sys.ary.copy(output,0,input,0,input#); - output[0] = sys.char.toupper(input[0]); - output[input#] = '\n'; - sys.io.p(output); - return 0; -}; diff --git a/chapter25/docs/examples/Dijkstra.smp b/chapter25/docs/examples/Dijkstra.smp deleted file mode 100644 index fd595eb5..00000000 --- a/chapter25/docs/examples/Dijkstra.smp +++ /dev/null @@ -1,72 +0,0 @@ - -// An implementation of -// https://sampleprograms.io/projects/dijkstra/ - -val shortestPath = { !sys.aryi64 matrix, int nodes, int src, int dst -> - i64 infinity = (1 << 63)-1; - var dist = new i64[nodes]; - var visited = new sys.adt.bitset(); - // All nodes are infinitely far from each other - for( int i=0; i 0 && !visited.get(node) && best+weight < dist[node] ) - dist[node] = best+weight; - } - } - count++; - } - return result; -}; - -val usage = { -> - sys.io.p("Usage: please provide three inputs: a serialized matrix, a source node and a destination node\n"); - return 0; -}; - -val main = { u8[~][] args -> - // Exactly 3 args - if( args# != 4 ) return usage(); - // First is a serialized square matrix of positive numbers - var matrix = sys.aryi64.parseAryI64(args[1]); - if( !matrix ) return usage(); - if( !matrix.len ) return usage(); - // All numbers are positive - for( int i=0; i= nodes || dst < 0 || dst >= nodes ) - return usage(); // Source and destination land within the graph - - i64 cost = shortestPath(matrix,nodes,src,dst); - if( cost >= 0 ) { - new sys.aryu8().num(cost).add('\n').write(1); - return 0; - } - return usage(); -}; diff --git a/chapter25/docs/examples/FileIO.smp b/chapter25/docs/examples/FileIO.smp deleted file mode 100644 index e48d435b..00000000 --- a/chapter25/docs/examples/FileIO.smp +++ /dev/null @@ -1,50 +0,0 @@ - -// An implementation of -// https://sampleprograms.io/projects/file-input-output/ - -val FILE = "output.txt"; - -val main = { u8[~][] args -> - var str = new sys.aryu8(); - str.addAry("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n"); - str.addAry("Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n"); - str.addAry("Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n"); - str.addAry("Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n"); - - // Create - i32 fd = sys.io.create(FILE); - if( fd == -1 ) return _error(); - // Write - int wrote = sys.io.writeOff(fd,str.buf,0,str.len); - if( wrote == -1 ) return _error(); - if( wrote != str.len ) return _error2(-2); - // Close - if( sys.io.close(fd) != 0 ) return _error(); - - // Open - i32 fd2 = sys.io.open(FILE); - if( fd2 == -1 ) return _error(); - // Read - var got = sys.io.read(fd2); - if( got# != str.len ) return _error2(-3); - // Close - if( sys.io.close(fd2) != 0 ) return _error(); - - // Check contents are equal - if( sys.ary.cmp(got,0,str.buf,0,str.len) ) - return _error2(-4); - - // Remove - if( sys.io.remove(FILE) != 0 ) return _error(); - - sys.io.p("File I/O succeeded\n"); - return 0; -}; - -val _error2 = { i32 errno -> - sys.io.remove(FILE); - new sys.aryu8().addAry("Failed with error code ").num(errno).add('\n').write(sys.libc.STDERR); - sys.libc._exit(errno); -}; - -val _error = { -> _error2(sys.libc.errno()); }; diff --git a/chapter25/docs/font-awesome-4.7.0.zip b/chapter25/docs/font-awesome-4.7.0.zip deleted file mode 100644 index b6bdb4bd..00000000 Binary files a/chapter25/docs/font-awesome-4.7.0.zip and /dev/null differ diff --git a/chapter25/docs/ifg_trim.pdf b/chapter25/docs/ifg_trim.pdf deleted file mode 100644 index d952fd4f..00000000 Binary files a/chapter25/docs/ifg_trim.pdf and /dev/null differ diff --git a/chapter25/docs/lattice.gv b/chapter25/docs/lattice.gv deleted file mode 100644 index 8661082d..00000000 --- a/chapter25/docs/lattice.gv +++ /dev/null @@ -1,203 +0,0 @@ -digraph Lattice { - compound = true; - // Define nodes - splines=false; - node [shape=circle, style=filled]; - nodesep=0.2; - ranksep=0.2; - - TOP [label=<⊤>, fillcolor=black, fontcolor=white]; - BOT [label=<⊥>, fillcolor=black, fontcolor=white]; - - // ---------------------- - // Control - XCTRL [label=<⊤:ctrl>, fillcolor=yellow, shape=oval]; - CTRL [label=<⊥:ctrl>, fillcolor=yellow, shape=oval]; - - TOP -> XCTRL; - XCTRL -> CTRL; - CTRL -> BOT; - - // ---------------------- - // Integers - INT_TOP [label=<⊤:int>, fillcolor=lightblue, shape=oval]; - INT_BOT [label=<⊥:int>, fillcolor=lightblue, shape=oval]; - - INT_HI [label="[min>max]" , fillcolor=lightblue, shape=oval]; - INT_XBOOL [label="[1...0]", fillcolor=lightblue, shape=oval]; - INT_CON [label="constants", fillcolor=lightblue, shape=oval]; - INT_CON0 [label="0", fillcolor=lightblue]; - INT_CON1 [label="1", fillcolor=lightblue]; - INT_BOOL [label="[0...1]", fillcolor=lightblue,shape=oval]; - INT_LO [label="[min INT_TOP; - INT_TOP -> INT_HI; - INT_HI -> INT_XBOOL; - INT_XBOOL -> INT_CON0; - INT_XBOOL -> INT_CON1; - INT_HI -> INT_CON; - INT_CON0 -> INT_BOOL; - INT_CON1 -> INT_BOOL; - INT_BOOL -> INT_LO; - INT_CON -> INT_LO; - INT_LO -> INT_BOT; - INT_BOT -> BOT; - - INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; - - // ---------------------- - // Floats - FLT_TOP [label=<⊤:flt>, fillcolor=aqua, shape=oval]; - FLT_BOT [label=<⊥:flt>, fillcolor=aqua, shape=oval]; - - FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; - FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; - FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; - FLT_X32 [label="~f32", fillcolor=aqua]; - FLT_CON0 [label="0." , fillcolor=aqua]; - FLT_32 [label="f32" , fillcolor=aqua]; - - TOP -> FLT_TOP; - FLT_TOP -> FLT_CON64 - FLT_TOP -> FLT_CONPI - FLT_CON64 -> FLT_BOT - FLT_CONPI -> FLT_BOT - - FLT_TOP -> FLT_X32; - FLT_X32 -> FLT_CON0; - FLT_X32 -> FLT_CON32; - FLT_CON0 -> FLT_32; - FLT_CON32 -> FLT_32; - FLT_32 -> FLT_BOT - - FLT_BOT -> BOT; - - FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; - - - // ---------------------- - // Pointers, just a boolean nil/not and a struct - PTR [shape=none, fillcolor=none, label=< - - - -
*ptr
struct
- >]; - PTR0 [shape=none, fillcolor=none, label=< - - - -
*ptr?
struct
- >]; - - TOP -> PTR; - PTR -> PTR0; - PTR0 -> BOT; - - // ---------------------- - // Structs - STRUCT_TOP [label=<⊤:struct>, fillcolor=lightgreen, shape=oval]; - STRUCT_BOT [label=<⊥:struct>, fillcolor=lightgreen, shape=oval]; - - STRUCT_S1 [shape=none, fillcolor=none, label=< - - -
fieldint/ptr
- >]; - STRUCT_S2 [shape=none, fillcolor=none, label=< - - - -
fieldint/ptr
fieldint/ptr
- >]; - STRUCT_SN [shape=none, fillcolor=none, label=< - - - - -
fieldint/ptr
... int/ptr
fieldint/ptr
- >]; - - - TOP -> STRUCT_TOP; - STRUCT_TOP -> STRUCT_S1; - STRUCT_TOP -> STRUCT_S2; - STRUCT_TOP -> STRUCT_SN; - STRUCT_S1 -> STRUCT_BOT; - STRUCT_S2 -> STRUCT_BOT; - STRUCT_SN -> STRUCT_BOT; - STRUCT_BOT -> BOT; - - STRUCT_S1 -> STRUCT_S2 -> STRUCT_SN [style=invis]; - - // ---------------------- - // Memory - MEM_TOP [label=<⊤:mem>, fillcolor=blue, fontcolor=white, shape=oval]; - MEM_BOT [label=<⊥:mem>, fillcolor=blue, fontcolor=white, shape=oval]; - MEM_ALIAS1 [label="#1" , fillcolor=blue, fontcolor=white]; - MEM_ALIASDOTS [label="..." , fillcolor=blue, fontcolor=white, shape=oval]; - MEM_ALIASN [label="#n" , fillcolor=blue, fontcolor=white]; - - TOP -> MEM_TOP; - MEM_TOP -> MEM_ALIAS1; - MEM_TOP -> MEM_ALIASDOTS; - MEM_TOP -> MEM_ALIASN; - MEM_ALIAS1 -> MEM_BOT; - MEM_ALIASDOTS -> MEM_BOT; - MEM_ALIASN -> MEM_BOT; - MEM_BOT -> BOT; - - MEM_ALIAS1 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis]; - - // ---------------------- - // Tuples - - TUPLE_TOP [label=<⊤:tuple>, fillcolor=pink, shape=oval]; - TUPLE_BOT [label=<⊥:tuple>, fillcolor=pink, shape=oval]; - - TUPLE1 [shape=none, fillcolor=none, label=< - - - -
Tuple
type
- >]; - TUPLE2 [shape=none, fillcolor=none, label=< - - - - -
Tuple
type
type
- >]; - TUPLEN [shape=none, fillcolor=none, label=< - - - - - -
Tuple
type
...
type
- >]; - - - TOP -> TUPLE_TOP; - TUPLE_TOP -> TUPLE1; - TUPLE_TOP -> TUPLE2; - TUPLE_TOP -> TUPLEN; - TUPLE1 -> TUPLE_BOT; - TUPLE2 -> TUPLE_BOT; - TUPLEN -> TUPLE_BOT; - TUPLE_BOT -> BOT; - - // ---------------------- - // Additional customization - {rank=same; TOP;} - {rank=same; INT_TOP; FLT_TOP; XCTRL; PTR; STRUCT_TOP; MEM_TOP; TUPLE_TOP} - {rank=same; INT_CON; INT_CON0; INT_CON1; - FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; - STRUCT_S1; STRUCT_S2; STRUCT_SN; - MEM_ALIAS1; MEM_ALIASDOTS; MEM_ALIASN; - TUPLE1; TUPLE2; TUPLEN; - } - {rank=same; INT_BOT; FLT_BOT; CTRL; PTR0; STRUCT_BOT; MEM_BOT; TUPLE_BOT} - {rank=same; BOT;} -} diff --git a/chapter25/docs/lattice.svg b/chapter25/docs/lattice.svg deleted file mode 100644 index e72b473b..00000000 --- a/chapter25/docs/lattice.svg +++ /dev/null @@ -1,691 +0,0 @@ - - - - - - -Lattice - - - -TOP - -⊤ - - - -XCTRL - -⊤ -:ctrl - - - -TOP->XCTRL - - - - - -INT_TOP - -⊤ -:int - - - -TOP->INT_TOP - - - - - -FLT_TOP - -⊤ -:flt - - - -TOP->FLT_TOP - - - - - -PTR - - - -*ptr - - -struct - - - -TOP->PTR - - - - - -STRUCT_TOP - -⊤ -:struct - - - -TOP->STRUCT_TOP - - - - - -MEM_TOP - -⊤ -:mem - - - -TOP->MEM_TOP - - - - - -TUPLE_TOP - -⊤ -:tuple - - - -TOP->TUPLE_TOP - - - - - -BOT - -⊥ - - - -CTRL - -⊥ -:ctrl - - - -XCTRL->CTRL - - - - - -CTRL->BOT - - - - - -INT_HI - -[min>max] - - - -INT_TOP->INT_HI - - - - - -INT_BOT - -⊥ -:int - - - -INT_BOT->BOT - - - - - -INT_XBOOL - -[1...0] - - - -INT_HI->INT_XBOOL - - - - - -INT_CON - -constants - - - -INT_HI->INT_CON - - - - - -INT_CON0 - -0 - - - -INT_XBOOL->INT_CON0 - - - - - -INT_CON1 - -1 - - - -INT_XBOOL->INT_CON1 - - - - - -INT_LO - -[min<max] - - - -INT_CON->INT_LO - - - - - - -INT_BOOL - -[0...1] - - - -INT_CON0->INT_BOOL - - - - - - -INT_CON1->INT_BOOL - - - - - -INT_BOOL->INT_LO - - - - - -INT_LO->INT_BOT - - - - - -FLT_CON64 - -64b consts -[excludes -32b consts] - - - -FLT_TOP->FLT_CON64 - - - - - -FLT_CONPI - -3.14159... - - - -FLT_TOP->FLT_CONPI - - - - - -FLT_X32 - -~f32 - - - -FLT_TOP->FLT_X32 - - - - - -FLT_BOT - -⊥ -:flt - - - -FLT_BOT->BOT - - - - - -FLT_CON64->FLT_BOT - - - - - -FLT_CON32 - -32b consts - - - - -FLT_32 - -f32 - - - -FLT_CON32->FLT_32 - - - - - -FLT_CONPI->FLT_BOT - - - - - - -FLT_X32->FLT_CON32 - - - - - -FLT_CON0 - -0. - - - -FLT_X32->FLT_CON0 - - - - - - -FLT_CON0->FLT_32 - - - - - -FLT_32->FLT_BOT - - - - - -PTR0 - - - -*ptr? - - -struct - - - -PTR->PTR0 - - - - - -PTR0->BOT - - - - - -STRUCT_S1 - - - -field - - - - - - - - -int/ptr - - - -STRUCT_TOP->STRUCT_S1 - - - - - -STRUCT_S2 - - - -field - - - - - - - - -int/ptr - - -field - - - - - - - - -int/ptr - - - -STRUCT_TOP->STRUCT_S2 - - - - - -STRUCT_SN - - - -field - - - - - - - - -int/ptr - - -...   - - - - - - - - -int/ptr - - -field - - - - - - - - -int/ptr - - - -STRUCT_TOP->STRUCT_SN - - - - - -STRUCT_BOT - -⊥ -:struct - - - -STRUCT_BOT->BOT - - - - - -STRUCT_S1->STRUCT_BOT - - - - - - -STRUCT_S2->STRUCT_BOT - - - - - - -STRUCT_SN->STRUCT_BOT - - - - - -MEM_ALIAS1 - -#1 - - - -MEM_TOP->MEM_ALIAS1 - - - - - -MEM_ALIASDOTS - -... - - - -MEM_TOP->MEM_ALIASDOTS - - - - - -MEM_ALIASN - -#n - - - -MEM_TOP->MEM_ALIASN - - - - - -MEM_BOT - -⊥ -:mem - - - -MEM_BOT->BOT - - - - - -MEM_ALIAS1->MEM_BOT - - - - - - -MEM_ALIASDOTS->MEM_BOT - - - - - - -MEM_ALIASN->MEM_BOT - - - - - -TUPLE1 - - - -Tuple - - -type - - - -TUPLE_TOP->TUPLE1 - - - - - -TUPLE2 - - - -Tuple - - -type - - -type - - - -TUPLE_TOP->TUPLE2 - - - - - -TUPLEN - - - -Tuple - - -type - - -... - - -type - - - -TUPLE_TOP->TUPLEN - - - - - -TUPLE_BOT - -⊥ -:tuple - - - -TUPLE_BOT->BOT - - - - - -TUPLE1->TUPLE_BOT - - - - - -TUPLE2->TUPLE_BOT - - - - - -TUPLEN->TUPLE_BOT - - - - - diff --git a/chapter25/docs/lattice2.gv b/chapter25/docs/lattice2.gv deleted file mode 100644 index 6aa37fa0..00000000 --- a/chapter25/docs/lattice2.gv +++ /dev/null @@ -1,85 +0,0 @@ -digraph Lattice { - compound = true; - // Define nodes - splines=false; - node [shape=oval, style=filled]; - nodesep=0.2; - ranksep=0.4; - - TOP [label="~scalar\n+int+tmp+0", fillcolor=black, fontcolor=white, group=center]; - - // ------------------------ - PTRHQ [label="~tmp\n+tmp+0", fillcolor=green, fontcolor=white, group=left]; - TOP -> PTRHQ - - VALH_ [label="~nscalar\n+int+tmp", fillcolor=white, group=center]; - TOP -> VALH_ - - INTHQ [label="~int\n+int+0", fillcolor=lightblue, group=right]; - TOP -> INTHQ - - LEFTHI [label="junk", style=invis, group=junkleft] - - - PTRHQ -> LEFTHI-> VALH_ -> INTHQ [style=invis]; - { rank=same; PTRHQ; LEFTHI; VALH_; INTHQ } - - // ------------------------ - PTRH_ [label="~ntmp\n+tmp", fillcolor=green, fontcolor=white, group=left]; - VALH_ -> PTRH_ - PTRHQ -> PTRH_ - - INTH_ [label="~nint\n+int", fillcolor=lightblue, group=right]; - VALH_ -> INTH_ - INTHQ -> INTH_ - { rank=same; PTRH_; INTH_ } - - // ------------------------ - NILX_ [label="~nil\n[int,tmp]+0", fillcolor=aqua, group=junkleft]; - INTHQ -> NILX_ - PTRHQ -> NILX_ - - NIL__ [label="nil\n[+int+tmp],0", fillcolor=pink]; - VALH_ -> NIL__; - - NILX_ -> NIL__ [style=invis]; - { rank=same; NIL__; NILX_ } - - // ------------------------ - PTRL_ [label="ntmp\ntmp", fillcolor=green, fontcolor=white, group=left]; - PTRH_ -> PTRL_ - - INTL_ [label="nint\nint", fillcolor=lightblue, group=right]; - INTH_ -> INTL_ - { rank=same; PTRL_; INTL_ } - - // ------------------------ - PTRL0 [label="tmp\ntmp,0", fillcolor=green, fontcolor=white, group=left]; - PTRL_ -> PTRL0 - NIL__ -> PTRL0 - - VALL_ [label="nscalar\nint,tmp", fillcolor=white, group=center]; - PTRL_ -> VALL_ - INTL_ -> VALL_ - NILX_ -> VALL_ - - INTL0 [label="int\nint,0", fillcolor=lightblue, group=right]; - INTL_ -> INTL0 - NIL__ -> INTL0 - - PTRL0 -> VALL_ -> INTL0 [style=invis]; - { rank=same; PTRL0; VALL_; INTL0 } - - // ------------------------ - BOT [label="scalar\nint,tmp,0", fillcolor=black, fontcolor=white, group=center]; - PTRL0 -> BOT - INTL0 -> BOT - VALL_ -> BOT - - // ------------------------ - // Verticle alignment - TOP -> VALH_ -> VALL_ -> BOT [style=invis]; - PTRHQ -> PTRH_ -> PTRL_ -> PTRL0 [style=invis]; - INTHQ -> INTH_ -> INTL_ -> INTL0 [style=invis]; - LEFTHI -> NILX_ [style=invis] -} diff --git a/chapter25/docs/lattice2.svg b/chapter25/docs/lattice2.svg deleted file mode 100644 index 8b682aa7..00000000 --- a/chapter25/docs/lattice2.svg +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - -Lattice - - - -TOP - -~scalar -+int+tmp+0 - - - -PTRHQ - -~tmp -+tmp+0 - - - -TOP->PTRHQ - - - - - -VALH_ - -~nscalar -+int+tmp - - - -TOP->VALH_ - - - - - - -INTHQ - -~int -+int+0 - - - -TOP->INTHQ - - - - - - - -PTRH_ - -~ntmp -+tmp - - - -PTRHQ->PTRH_ - - - - - - -NILX_ - -~nil -[int,tmp]+0 - - - -PTRHQ->NILX_ - - - - - - -VALH_->PTRH_ - - - - - -INTH_ - -~nint -+int - - - -VALH_->INTH_ - - - - - -NIL__ - -nil -[+int+tmp],0 - - - -VALH_->NIL__ - - - - - -VALL_ - -nscalar -int,tmp - - - - -INTHQ->INTH_ - - - - - - -INTHQ->NILX_ - - - - - - - -PTRL_ - -ntmp -tmp - - - -PTRH_->PTRL_ - - - - - - -INTL_ - -nint -int - - - -INTH_->INTL_ - - - - - - - -NILX_->VALL_ - - - - - -PTRL0 - -tmp -tmp,0 - - - -NIL__->PTRL0 - - - - - -INTL0 - -int -int,0 - - - -NIL__->INTL0 - - - - - -PTRL_->PTRL0 - - - - - - -PTRL_->VALL_ - - - - - -INTL_->VALL_ - - - - - -INTL_->INTL0 - - - - - - - -BOT - -scalar -int,tmp,0 - - - -PTRL0->BOT - - - - - - -VALL_->BOT - - - - - - -INTL0->BOT - - - - - diff --git a/chapter25/docs/pardoe.docx b/chapter25/docs/pardoe.docx deleted file mode 100644 index 24fde921..00000000 Binary files a/chapter25/docs/pardoe.docx and /dev/null differ diff --git a/chapter25/docs/webtcp.min.js b/chapter25/docs/webtcp.min.js deleted file mode 100644 index bf23ee5a..00000000 --- a/chapter25/docs/webtcp.min.js +++ /dev/null @@ -1,65 +0,0 @@ -function Http(j){this.cID=Math.random().toString(36).substr(2);this.webtcp=j;this.webtcp.httpClients[this.cID]=this;this.createPacket=function(){return{cID:this.cID,type:"http",host:this.remoteAddress,port:this.remotePort,method:null,data:null}};this.ondata=function(){};this.get=function(g,c){this.on("data",c);this.rpc("httpGet",[g])};this.post=function(g,c,j){this.on("data",j);this.rpc("httpPost",[g,c])}}Http.prototype=new WebTCPIO;function Socket(j,g,c,p){this.sID=Math.random().toString(36).substr(2);this.webtcp=j;this.closed=this.ready=!1;this.options=p;this.sockOpts={_updating:!1};this.remoteAddress=g;this.remotePort=c;this.webtcp.sockets[this.sID]=this;this.createPacket=function(){return{id:Math.random().toString(36).substr(2),sID:this.sID,type:"tcp",options:this.options,host:this.remoteAddress,port:this.remotePort,data:null}};this.onconnect=function(){this.webtcp.sockets[sID].ready=!0;this.webtcp.sockets[sID].closed=!1}; -this.ondata=function(){};this.onend=function(){};this.ontimeout=function(){};this.ondrain=function(){};this.onclose=function(){this.webtcp.sockets[sID].ready=!1;this.webtcp.sockets[sID].closed=!0};this.getSockOpts=function(){this.sockOpts._updating=!0;this.rpc("getSockOpts")};this.onSockOptsRcv=function(c){this.sockOpts=c;this.sockOpts._updating=!1}}Socket.prototype=new WebTCPIO;var JSON;JSON||(JSON={}); -(function(){function j(c,p){var q,t,n,x,i=k,e,l=p[c];l&&"object"==typeof l&&"function"==typeof l.toJSON&&(l=l.toJSON(c));"function"==typeof r&&(l=r.call(p,c,l));switch(typeof l){case "string":return g(l);case "number":return isFinite(l)?String(l):"null";case "boolean":case "null":return String(l);case "object":if(!l)return"null";k+=v;e=[];if("[object Array]"===Object.prototype.toString.apply(l)){x=l.length;for(q=0;qc?"0"+c:c}"use strict";"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+c(this.getUTCMonth()+1)+"-"+c(this.getUTCDate())+"T"+c(this.getUTCHours())+":"+c(this.getUTCMinutes())+":"+c(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var p=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, -n=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,k,v,D={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},r;"function"!=typeof JSON.stringify&&(JSON.stringify=function(c,g,p){var n;v=k="";if("number"==typeof p)for(n=0;n=a};c.countRTO=function(a){var b;return 100b;b++)d.push(String.fromCharCode(b));B=(r.lastIndex=0,d.join("").replace(r,function(a){return c[a]="\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4),""}),r.lastIndex=0,c)}a=a.replace(r,function(a){return B[a]})}return a};var q="websocket xdr-streaming xhr-streaming iframe-eventsource iframe-htmlfile xdr-polling xhr-polling iframe-xhr-polling jsonp-polling".split(" "); -c.probeProtocols=function(){for(var a={},b=0;b