K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>お疲れ様です。返事をもらえると嬉しいのですが、ごゆっくりどうぞ。 > ↓のクラスを見てわかるとおりに、ほとんどstructをクラスにしたままです。内部 >データが少し変わっていますが、structの全体接続構造はほとんどそのままです。 > 私も意味もなくポリモルフィズムするのは好きではないし。本来の目的は >クラスでパッキングして見通しを良くしよう。そして、書くことによる自身の >理解、そして必要機能の追加のためです。それと、diksamもほぼ同じ量のメモリー >確保をしていますよ。 > 見間違いかもしれないけど、0.2.0はメモリーストレージを使ってないような・・・ > >class CT_Compiler : public CBase >{ >public: > int function_count; // 関数の数 > CT_FunctionDefinition * function_list; // 関数のリスト > CT_DeclarationList * declaration_list; // トップの宣言リスト > CT_StatementList * statement_list; // トップのステートメントのリスト > CT_Block * current_block; // 一番外側のブロック >//== 式のツリーノード =========================================== >class CT_Expression : public CBase >{ >public: > CT_TypeSpecifier *type; // > E_ExpressionKind kind; // 式の種類 > int line_number; > union { > E_Boolean boolean_value; // boolデータ リテラル > int int_value; // intデータ リテラル > double double_value; // doubeデータ リテラル > string *string_value; // stringデータ リテラル > ST_IdentifierExpression identifier; // 関数又は宣言文の識別子 > ST_CommaExpression comma; // カンマ(,)式 > ST_AssignExpression assign_expression; // 代入式 > ST_BinaryExpression binary_expression; // 演算式 > CT_Expression *minus_expression; // マイナス式 > CT_Expression *logical_not; // 論理否定式 > ST_FunctionCallExpression function_call_expression; // 関数式 > ST_MemberExpression member_expression; // 使用していない? > CT_ExpressionList *array_literal; // 配列データ リテラル > ST_IndexExpression index_expression; // 配列の添え字式 > ST_IncrementOrDecrement inc_dec; // ++,--,式 > ST_CastExpression cast; // キャスト演算式 > ST_ArrayCreation array_creation; // 配列生成式 > } u; > > > 実は、構文解析で構文ツリーが出来た時点では、TOPのCT_Compilerのオブジェクトを >deleteすればディストラクタ繋がりできれいに総てのメモリーを解放できたのですが >Fixtreeを作ってみると、多重リンクはするはリンクが切れてフリーが山ほど出てくる >はで。メモリー監視・チェック・報告のデバックプログラムが、一躍メモリー管理 >プログラムに昇格して、多重リンクや放置されたメモリーを管理して、きれいに掃除 >することになりました。思わぬ副作用が・・・ > 今大改造中で動かせなかったのですが、構文解析時点で5千数百のnewをしていました。 > > 実は、ジェネレータとVM部分を始めていたのですが、ほしい仕様のための変更部分が >目立って見えてきたため、yacc,lex部分から大きく改造を始めてしまいました。 >いま、#include #define 構文の追加と最外枠のステートメント禁止、main()関数起動 >を組み込み始めました。そして上の二つの構文のためにプリプロセッサを書いています。 >だから、コンパイルは+1増えて4ステージになりました。#includeは単に外部ファイルを >同一ファイルとしてコンパイルできる普通の機能です。でも、その為にライン数管理が >ファイル名+ライン数になってその部分が全体的改造に。 > 本当は、一通り終わるまで新機能は入れないつもりでしたが、チョコチョコ変えている >時点で、もう全体変更しようと思ってしまった。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!