プチコン3号&BIGまとめWiki

投稿プログラム : Smile Basic Custom Compiler

2015年3月8日投稿 / 投稿者 : 涼季 遊 / タグ : 投稿プログラム 実用ツール カスタムコンパイラ プログラム作成支援 ライブラリ

概要

このプログラムは、プチコン3号で作られたライブラリプログラムを便利に使用するためのプログラム作成支援ツールです。
プチコン3号のプログラムに「include」「module」などの追加書式をサポートさせます

プログラムの自由度が広がり、たいていのことはできるようになったプチコン3号ですが、ある程度規模の大きい作品には
公開されているライブラリを使っていきたいところです。

しかし3号でも変わらず、ライブラリを使うには変数や関数の名前がかぶらないように変数名を長くせざるを得ないなど、
ライブラリを作る方も使う方もちょっと不便です。
あまつさえMk2まであった「APPEND」が無くなったため、「いったいどうやってソース結合すればいいんだぁ?」と思った人もいるかもしれません(コピペすればいいんですが)

そんなこんなでプチコンの抱えるライブラリ云々の不満を解決するためのツールです。

使用方法

1.プチコンのプログラムソースに対して、SmileBasic3CustomCompilerがサポートする命令や書式を記述します
  (※この段階のプログラムはプチコン3号では実行できません、手順4まで進みコンパイルする必要があります)
2.SmileBasic3CustomCompilerを実行し、自分の作ったプログラム名を指定します。
3.コンパイルが始まるので待ちます
4.書式にエラーがなければ処理が完了し、プチコン3号で実行可能なプログラムが保存されます

機能一覧

 SmileBasic3CustomCompilerがサポートする機能の一覧です

「#INCLUDE」による外部ソース自動結合

ライブラリとして作った外部プログラムを結合します。

ライブラリを埋め込みたい箇所に

  1. #INCLUDE [PRGNAME]

のように記述します。
コンパイル後、この命令を記述した行に指定したプログラムが埋め込まれます。

以下記述例

  • ライブラリを使用するプログラム
    1. DIM ABC
    2. ABC=FUNC1()
    3. END
    4. #INCLUDE LIB1
  • ライブラリプログラム(プログラム名:LIB1)
    1. DEF FUNC1()
    2.  RRETURN 512
    3. END
  • コンパイル後
    1. DIM ABC
    2. ABC=FUNC1()
    3. END
    4. DEF FUNC1()
    5.  RRETURN 512
    6. END
    7. ’INCLUDED:LIB1
モジュール機能によるプログラムの完全モジュール化

プログラムの一部をモジュール化し、変数や関数などの要素をメインプログラムから隠蔽します

プログラム中のモジュール化したい箇所を
「#MODULE」~「#GLOBAL」で囲うことによってその箇所をモジュールとして扱います

「#INCLUDE」を「#MODULE」~「#GLOBAL」で囲えばライブラリを丸ごとモジュール指定することになります

「#MODULE」~「#GLOBAL」で囲われた領域の変数や関数は、
コンパイル時に自動変換され、「#MODULE」の引数に指定したモジュール名特有の名称になります

※モジュール変数は必ず「DIM」で宣言する必要があります宣言しない場合、モジュール変数として扱われません

記述例

  1. #MODULE TESTMODULE
  2. DIM ABC
  3. DEF SETABC VALUE
  4.  ABC=VALUE
  5. END
  6. #GLOBAL

コンパイル後

  1. ’#MODULE TESTMODULE
  2. DIM TESTMODULE_ABC
  3. DEF TESTMODULE_SETABC VALUE
  4.  TESTMODULE_ABC=VALUE
  5. END
  6. ’#GLOBAL

また、モジュールは階層型にネストすることが可能で
「#MODULE」~「#GLOBAL」で囲われた領域をさらに「#MODULE」~「#GLOBAL」で囲うことにより、ネストします

記述例

  1. #MODULE TESTMODULE2
  2.  DIM ABC
  3.  #MODULE TESTMODULE1
  4.   DIM ABC
  5.   DEF SETABC VALUE
  6.    ABC=VALUE
  7.   END
  8.  #GLOBAL
  9. #GLOBAL

コンパイル後

  1. ’#MODULE TESTMODULE2
  2.  DIM TESTMODULE2_ABC
  3. ’#MODULE TESTMODULE1
  4.   DIM TESTMODULE2_TESTMODULE1_ABC
  5.   DEF TESTMODULE2_TESTMODULE1_SETABC VALUE
  6.    TESTMODULE2_TESTMODULE1_ABC=VALUE
  7.   END
  8. ’#GLOBAL
  9. ’#GLOBAL
モジュール間の要素指定

モジュール化された要素に外部からアクセスするには
 [モジュール名].[変数名]
のようにモジュール名を指定して記述します。

またネストした下位モジュールから親モジュールへアクセスするには
 SUPER.[変数名]
のように記述します、また、親の親にアクセスするには
 SUPER.SUPER.[変数名]
のように記述します

モジュール中から非モジュール空間の要素へアクセスするには
 G.[変数名]
のように「G.」の後に記述します

モジュールがネストしている場合は、モジュール名を[.]で区切って階層指定します

モジュール中で非モジュール空間の要素を宣言したい場合は

#PUBLIC [DIM等の宣言式]
と記述します

以下記述例

  1. DIM XXX
  2. XXX=123
  3. GOSUB@TESTMODULE2.INIT
  4. GOSUB@TESTMODULE2.TESTMODULE1.INIT
  5. GOSUB@TESTMODULE3.INIT
  6. TESTMODULE2.SETABC
  7. TESTMODULE2.TESTMODULE1.SETABC(TESTMODULE2.GETABC())
  8. ?TESTMODULE2.TESTMODULE1.GETABC
  9. END
  10. #MODULE TESTMODULE2
  11.  @INIT
  12.   DIM ABC
  13.  RETURN
  14.  DEF SETABC
  15.   ABC=G.XXX
  16.  END
  17.  DEF GETABC()
  18.   RETURN ABC
  19.  END
  20.  #MODULE TESTMODULE1
  21.   @INIT
  22.    DIM ABC
  23.   RETURN
  24.   DEF SETABC VALUE
  25.    ABC=VALUE
  26.   END
  27.   DEF GETABC()
  28.    RETURN SUPER.ABC + G.TESTMODULE3.ZZZ
  29.   END
  30.  #GLOBAL
  31. #GLOBAL
  32. #MODULE TESTMODULE3
  33.  @INIT
  34.   DIM ZZZ
  35.   ZZZ=1024
  36.  RETURN
  37. #GLOBAL

追加命令一覧

「#」から始まる追加命令の一覧です

  • #INCLUDE [ファイル名]
    引数に指定した外部プログラムを結合します
    指定するファイルはコンパイラと同じプロジェクトである必要があります
  • #OUTPUT [保存ファイル名]
    コンパイル後のプログラムのファイル名を指定します
    コンパイル完了後、[保存ファイル名]で指定された名前のファイルが保存されます
  • #MODULE [モジュール名]
    モジュール空間の開始を宣言します
    「#MODULE」~「#GLOBAL」で囲われた領域はモジュール空間となり、外部プログラムから隠蔽されます
  • #GLOBAL
    モジュール空間の終了を宣言します
  • #PUBLIC [宣言式]
    非モジュール空間の要素を宣言します
    以下のように引数として宣言式を記述して使用します

    #PUBLIC DEF FUNTION1(PARAM1)

公開キー

プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。

プチコン3号/BIG 公開キー
4KS5D443

コメント

この作品に対する感想や要望、バグ報告などがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : HSPに似てる (2015/03/08 (日) 19:08:42)
  • 涼季 遊 : というかモロにパクりました (2015/03/09 (月) 00:00:59)
  • 名無しさん : 行を分解する所でコメントとカンマを間違えてる。他にも要素の比較をする所で2箇所間違いがあった (2015/06/09 (火) 11:38:15)
  • 最凶プログラマー : HSP... (2017/12/08 (金) 07:30:49)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 1 人がこのサイトを見ています
  • このページはこれまでに 1907 回、本日は 1 回、昨日は 0 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.128 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:51 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30