Revisión | 20336696236c39edb64fe313fd5139d453830234 (tree) |
---|---|
Tiempo | 2018-11-08 23:19:44 |
Autor | dhrname <dhrname@user...> |
Commiter | dhrname |
Modify the ST_parse function
@@ -468,11 +468,12 @@ ST_Node ST_parse(ST_Token_Mode *array, size_t length, ST_Ordered_Pair *list) | ||
468 | 468 | ST_Stack_List bound_vstacklist = &null; |
469 | 469 | |
470 | 470 | /*現在のノードリストの項目 |
471 | - * ノード値は一番目の枝が束縛変数、二番目の枝が最後の変数であるような関数抽象ノード*/ | |
472 | - ST_Node seq = ST_EMPTY_NODE; | |
471 | + * ノード値については、 | |
472 | + * 一番目の枝が束縛変数、二番目の枝が最後の変数であるような関数抽象ノード*/ | |
473 | + ST_Node seq = ST_createNode(ST_EMPTY); | |
473 | 474 | |
474 | - /*入れ子になったときに、親を格納するノードスタックリスト*/ | |
475 | - ST_Stack_List cache_nstacklist = &null; | |
475 | + /*seqをルートノードの末子ノードとして初期化*/ | |
476 | + seq = ST_insertBefore(seq, ST_createNode(ST_EMPTY), ST_EMPTY_NODE); | |
476 | 477 | |
477 | 478 | for (int_fast32_t i=length-1; i>=0; i--) |
478 | 479 | { |
@@ -487,16 +488,16 @@ ST_Node ST_parse(ST_Token_Mode *array, size_t length, ST_Ordered_Pair *list) | ||
487 | 488 | } |
488 | 489 | else |
489 | 490 | { |
490 | - seq = ST_createNode(v); //, ST_EMPTY), seq); | |
491 | + ST_Node cache =seq; | |
492 | + seq = ST_createNode(v); | |
493 | + ST_insertBefore(ST_getParentNode(cache), seq, cache); | |
491 | 494 | } |
492 | 495 | /*後述する関数抽象の終わりのために、変数をキャッシュしておく*/ |
493 | 496 | cache_v = v; |
494 | 497 | v = ST_second(v); |
495 | 498 | break; |
496 | 499 | case ST_KAGIKAKKO_END_TOKEN: |
497 | - ST_pushTree(seq, cache_nstacklist); | |
498 | - /*一度、現在のリストをリセットする*/ | |
499 | - seq = ST_EMPTY; | |
500 | + seq = ST_insertBefore(seq, ST_createNode(ST_EMPTY), ST_EMPTY_NODE); | |
500 | 501 | break; |
501 | 502 | case ST_KAGIKAKKO_BEGIN_TOKEN: |
502 | 503 | /*あらかじめキャッシュしておいた変数cache_vは、「の後で、一番目に出てくる変数*/ |
@@ -507,7 +508,6 @@ ST_Node ST_parse(ST_Token_Mode *array, size_t length, ST_Ordered_Pair *list) | ||
507 | 508 | } |
508 | 509 | } |
509 | 510 | free_stacklist(bound_vstacklist); |
510 | - free_stacklist(cache_nstacklist); | |
511 | 511 | |
512 | 512 | /*rseqはseqを逆向きにしたもの |
513 | 513 | * ST_reverseNode関数が新規ノードを返すためにこのような形になっている*/ |
@@ -970,7 +970,7 @@ ST_Node ST_createNode(ST_Ordered_Pair* value) | ||
970 | 970 | * 副作用がある関数なので、扱いには注意を要する |
971 | 971 | * 一番目の引数parentが親ノード。三番目の引数ノードprevの前隣りに、二番目の引数ノードnodeを挿入 |
972 | 972 | * 三番目の引数が空ノードであれば、親ノードに末子ノードとして登録される |
973 | - * 返り値は、挿入に成功したときnode、失敗したときは空ノードを返す*/ | |
973 | + * 返り値は、挿入に成功したとき引数node、失敗したときは空ノードを返す*/ | |
974 | 974 | ST_Node ST_insertBefore(ST_Node parent, ST_Node node, ST_Node prev) |
975 | 975 | { |
976 | 976 | errno_before_eprint = INSERT_BEFORE_ERROR; |