Revisão | b2cc74fe1e0d6ba07b7ed0bc28244824aa4a7358 (tree) |
---|---|
Hora | 2020-01-27 22:50:34 |
Autor | dhrname <dhrname@user...> |
Commiter | dhrname |
Modify the Exception
@@ -1,7 +1,7 @@ | ||
1 | 1 | /* |
2 | 2 | * Star - A Programing language. |
3 | 3 | * |
4 | - * Copyright (C) 2017 dhrname <dhrnamesie@yahoo.co.jp> | |
4 | + * Copyright (C) 2017 dhrname <dhrname@joestar.sakura.ne.jp> | |
5 | 5 | */ |
6 | 6 | |
7 | 7 | #pragma once |
@@ -13,7 +13,6 @@ | ||
13 | 13 | * Λ = {名前, 乙} |
14 | 14 | * Λによって添数づけられた写像集合系Aの元の族Cを、クラスと考える |
15 | 15 | * インスタンス化は、この集合系Aから、Aの元である写像集合B(A∍B)の元を集めた集合への写像bと考える |
16 | - * このとき、インスタンス化を選出と呼ぶ | |
17 | 16 | * メソッドの呼び出しは、集合族Cと写像bの関数合成、すなわち、 |
18 | 17 | * a = C ∘ b |
19 | 18 | * を満たす写像aと考える(このとき、メソッドの名前集合はΛであることに注意せよ) |
@@ -27,36 +26,42 @@ | ||
27 | 26 | * したがって、遺伝継承は、単一継承のように一つのメソッドをたどっていくと、一つのクラスにたどり着く |
28 | 27 | * また、数世代の遺伝継承によって、多重継承を実現する |
29 | 28 | * |
29 | + * | |
30 | 30 | * 予約語 |
31 | - * 集合族 継承 名前空間 自分 自己 自身 我 俺 私 小生 余 拙者 | |
31 | + * クラス 継承 名前空間 自分 自己 自身 我 俺 私 小生 余 拙者 | |
32 | 32 | * |
33 | 33 | * この予約語、あるいはこの予約語に関数適用されない束縛変数は、すべて添数とみなす |
34 | 34 | * |
35 | - * また、選出は遺伝継承をたどっていった始祖の添数である | |
36 | - * | |
37 | 35 | * |
38 | 36 | * サンプルのソースコード |
39 | 37 | * |
38 | + * | |
40 | 39 | * 「 「内容」(甲)を名前として、 |
41 | 40 | * 「内容」(甲)を乙 |
42 | - * 」(インスタンス変数)を丙の集合族とする | |
43 | - * 丙と「集合族の内容」(変数)を継承した子供の集合族 | |
44 | - * 丙と子供を継承した孫という集合族 | |
41 | + * 」(インスタンス変数)を丙のクラスとする。 | |
42 | + * | |
43 | + * 丙と「クラスの内容」(変数)を継承した子供のクラス | |
45 | 44 | * |
45 | + * 丙と子供を継承した孫というクラス | |
46 | + * | |
46 | 47 | * 孫 |
47 | 48 | * 「甲は乙する」(甲) |
48 | 49 | * |
49 | - * サンプルという名前空間 | |
50 | 50 | * */ |
51 | 51 | |
52 | 52 | |
53 | -/*グローバル集合族*/ | |
54 | -ST_Node ST_Global_Family_Of_Sets; | |
53 | +/*ハッシュ表で使う素数*/ | |
54 | + | |
55 | +#define ST_M 2 | |
56 | + | |
57 | +/*グローバルクラスを格納した配列の派生型*/ | |
58 | +typedef ST_Node ST_Global_Family_Of_Sets[ST_M]; | |
55 | 59 | |
56 | 60 | /*ST_initClass 関数 |
57 | 61 | * クラスの初期化 |
58 | - * 戻り値はグローバル集合族ノード*/ | |
59 | -ST_Node ST_initClass(); | |
62 | + * 戻り値は初期化されたグローバルクラスノードの配列 | |
63 | + * グローバル変数を初期化するので注意*/ | |
64 | +ST_Global_Family_Of_Sets ST_initClass(); | |
60 | 65 | |
61 | 66 | /*ST_parseClass 関数 |
62 | 67 | * 引数のノードからクラスの文法を処理する*/ |
@@ -1385,7 +1385,8 @@ static inline ST_Token_Mode* alloca_tokens(uint_fast64_t filelength) | ||
1385 | 1385 | return s; |
1386 | 1386 | } |
1387 | 1387 | |
1388 | -/*ゲーデル数の一種である自然数のペアのコード化関数*/ | |
1388 | +/*ゲーデル数の一種である自然数のペアのコード化関数 | |
1389 | + * 参照:「C言語による計算の理論」(鹿島実)*/ | |
1389 | 1390 | static inline uint64_t pair (uint64_t x, uint64_t y) |
1390 | 1391 | { |
1391 | 1392 | return (((x+y) * (x+y+1) / 2 ) + x + 1); |
@@ -1420,41 +1421,7 @@ void ST_main(ST_Char* name, ST_Char* s, uint_fast64_t filelength) | ||
1420 | 1421 | ST_Node btr = ST_parse(freetree, tokens, filelength, varlist); |
1421 | 1422 | free(tokens); |
1422 | 1423 | ST_Node evalresult = ST_eval(varlist, btr); |
1423 | - ST_parseClass(evalresult); | |
1424 | - | |
1424 | + | |
1425 | 1425 | ST_freelist(varlist); |
1426 | 1426 | ST_freenode(freetree); |
1427 | 1427 | } |
1428 | - | |
1429 | -/*ST_initClass 関数 | |
1430 | - * クラスの初期化 | |
1431 | - * 戻り値はグローバル集合族ノード*/ | |
1432 | -ST_Node ST_initClass() | |
1433 | -{ | |
1434 | -} | |
1435 | - | |
1436 | -/*ST_parseClass 関数 | |
1437 | - * 引数のノードからクラスの意味を解析処理する*/ | |
1438 | -ST_Node ST_parseClass(ST_Node node) | |
1439 | -{ | |
1440 | - | |
1441 | - if ( (NULL == node) || ST_isEmptyNode(node) ) | |
1442 | - { | |
1443 | - return ST_EMPTY_NODE; | |
1444 | - } | |
1445 | - | |
1446 | - ST_Char *keywords = u8"集合族 継承 名前空間 自分 自己 自身 我 俺 私 小生 余 拙者"; | |
1447 | - | |
1448 | - ST_Ordered_Pair *varlist = ST_tokenize(keywords, alloca_tokens(strlen(keywords)*10)); | |
1449 | - | |
1450 | - ST_First_Type num = ST_first(varlist); | |
1451 | - | |
1452 | - for (ST_Node a = node;ST_isEmptyNode(a);a = ST_getPreviousNode(a)) | |
1453 | - { | |
1454 | - if (ST_getBoundVariable(ST_getNodeValue(a)) == num) | |
1455 | - { | |
1456 | - } | |
1457 | - } | |
1458 | - | |
1459 | - return ST_EMPTY_NODE; | |
1460 | -} |
@@ -32,5 +32,3 @@ | ||
32 | 32 | #include "orderedpair/list/item.h" |
33 | 33 | |
34 | 34 | #include "orderedpair/list/tree/nodelist/ntree.h" |
35 | - | |
36 | -#include "orderedpair/list/tree/nodelist/class/class.h" |
@@ -795,9 +795,7 @@ printf("\n%d\n", i); | ||
795 | 795 | |
796 | 796 | |
797 | 797 | ST_freenode(freelist); |
798 | - | |
799 | - ST_main("test", u8"集合族", 100); | |
800 | - ST_initClass(); | |
798 | + | |
801 | 799 | |
802 | 800 | /*以下のtests_file_lengthのアサーションは評価が値呼びであることを前提にしている*/ |
803 | 801 | tests_file_length = 0; |
@@ -937,9 +935,7 @@ int tests_invalid() { | ||
937 | 935 | |
938 | 936 | ST_Char *chee = "testsuite/eeucjp.st"; |
939 | 937 | ST_readFile(chee, ST_main); |
940 | - | |
941 | - assert( ST_isEmptyNode(ST_parseClass(ST_EMPTY_NODE)) ); | |
942 | - assert( ST_isEmptyNode(ST_parseClass(NULL)) ); | |
938 | + | |
943 | 939 | |
944 | 940 | |
945 | 941 | printf("ended error test...\n"); |