MikoScript 言語仕様

 起動コマンド行

 言語仕様の詳細を説明する前に、本章でまず、MikoScript を実行する際のコマンド行の
書き方について説明します。

●本コマンドの機能
 本コマンドでは、本スクリプト言語の実行だけでなく、中間コードのライブラリ管理等も
行なえるようになっています。本コマンドで実行できる機能は、次の通りです。

    ・本スクリプト言語で書かれたソースプログラムを実行
    ・モジュールファイルの中間コードをロードして実行
    ・ソースファイルを中間コードに変換してモジュールファイルに格納
    ・モジュールファイルの格納内容を一覧表示
    ・本コマンドの用法やバージョンを表示

●コマンド行の一般書式
  書式:
      <オプション> <ファイル名> <引数>

     DOS/コマンドプロンプトから実行する場合は、勿論、この書式の前に、
    本プログラムの実行ファイルを指定する必要があります。そのため、実際には、
 
       miko <オプション> <ファイル名> <引数>

    のようにコマンドを入力する必要があります。なお、以降の説明では、このような
    実行ファイルの指定を付けている場合と、省略している場合があります。

     一方、アプリケーションに組み込まれた MikoScript を実行する場合は、基本的に、
  そのアプリケーションに依存します。ちなみに、Apsaly テキストエディタの場合、
        <オプション> <ファイル名> <引数>
    の入力だけで済みます。

  説明:
    <オプション> は、
        / または - で始まり、その直後に、種別を示すアルファベット1字が続きます。
        その次に、= と <パラメータ> を続ける場合もあります。この = は省略しても
        構いません。また、<パラメータ> は2重引用符で囲うこともできます。ただし、
        <パラメータ> の中に空白がある場合は、必ず2重引用符で囲う必要があります。
        <オプション> は省略される場合もあります。また、複数になる場合もあります。
        <オプション> が複数の場合、各 <オプション> の先頭は必ず、/ または - に
    する必要があります。

    <ファイル名> は、
        操作の対象となるファイルの名称です。このファイルは、本スクリプト言語で書
        かれたソースファイルか、または、本言語の翻訳によって生成された中間コード
        のモジュールファイルかになります。対象ファイルが、ソースかモジュールかは、
        <ファイル名> の拡張子で判断します。拡張子が「.mcx 」の場合、モジュール
        ファイルとして扱います。拡張子が無い場合、<ファイル名> に「.mcx 」を付加
        した名称のファイルをモジュールファイルとして扱います。それ以外の場合は、
        ソースファイルとして扱います。
        コマンドの機能は、デフォールトでは、ソースファイル、または、モジュール
        ファイルの実行になります。その場合、<ファイル名> の指定は1つだけに限り
        ます。実行以外の機能に変更するには、後述の特別な <オプション> を指定する
        必要があります。
        <ファイル名> の指定は、相対パスでも、絶対パスでも構いません。相対パスの
        場合、基点は、本コマンドの実行時点でのカレントパスになります。ただし、
        カレントパスは、後述の /p オプションで変更することもできます。
        <ファイル名> は、不要な場合もあれば、複数になる場合もあります。
        <ファイル名> には、ワイルドカードは使えません。
        <ファイル名> の中に空白文字がある場合、<ファイル名> を2重引用符で囲う
        必要があります。
        <ファイル名> の最初の文字が - の場合は、<ファイル名> には指定できません。
        <ファイル名> がショートカットの場合、対象は、ショートカットの参照先では
        なく、ショートカット自身になってしまいます。

    <引数> は、
        <ファイル名> のファイルを実行する際に、主関数に渡たす引数の文字列です。
        この場合、<ファイル名> 以降の全ての項が、<引数> になります。<引数> は、
        0個以上の指定が可能です。
        コマンドの機能が実行でない場合、<引数> はありません。

  例:
    miko s1.mc      ・・・ ソースファイル s1.mc を実行(引数なし)
    miko s2.mc a b  ・・・ ソースファイル s2.mc を実行(引数は a b )
    miko s3.mcx     ・・・ 中間コードファイル s3.mcx を実行(引数なし)
    miko s4 c       ・・・ 中間コードファイル s4.mcx を実行(引数は c )
    miko /m=sx /n="sample" s1.mc s2.mc s3.mc
       ・・・ ソースファイル s1.mc s2.mc s3.mc を中間コードに変換して
          モジュールファイル sx.mcx に格納(モジュール説明文は、sample )
    miko -d slib    ・・・ モジュールファイル slib.mcx の内容を一覧表示
    miko -?         ・・・ 本コマンドの用法を表示

●コマンドオプション
    本コマンドの各 <オプション> の詳細を、次に説明します。

    /d    モジュールの一覧表示
          このオプション以降に指定された <ファイル名> のファイル内に格納され
          ているモジュールの一覧を表示します。
          この場合、 <ファイル名> は複数指定可能です。

    /f=<コマンド入力ファイル名>
          コマンド行の入力を、指定された <コマンド入力ファイル名> のファイルに
          切り換えます。これは、ライブラリー作成時等で、コマンド行が長い場合や
          同じコマンド行を何回も使う場合に、便利です。
          なお、コマンド入力ファイル内の TAB と改行コードは、半角空白と同様に、
          コマンドの各項目を区切る空白として扱われます。
              例:  /f=files.txt
                    /f=MakeLib.cmd

    /h      本コマンドの用法を表示します。( /? と同じ )

    /i=<インクルードパス>
          #include マクロ で指定されたファイルの検索パスの追加分として、
          <インクルードパス> のパスを設定します。
          複数のパスを指定する場合は、; で区切ります。
          相対パスを指定した場合、現時点のカレントパスが基準になります。
              例: /i=D:\Script\Include
                    /i"..\Inc;E:\Test\Inc"

    /l=<ライブラリーパス>
          モジュールファイルの検索パスの追加分として、 <ライブラリーパス> の
          パスを設定します。
          複数のパスを指定する場合は、; で区切ります。
          相対パスを指定した場合、現時点のカレントパスが基準になります。
             例: /l=D:\Script\Library
                    /l"..\Lib;E:\Test\Lib"
          ライブラリーパスについては、「モジュール」の章で説明します。

    /m=<モジュール格納ファイル名>
          モジュール格納モードに移行します。つまり、このオプション以降に指定
          された <ファイル名> のファイルに対しては、ソースファイルなら、中間
          コードに変換してロードし、モジュールファイルなら、そのままロードし
          て、最後に、全ロードモジュールを、この <モジュール格納ファイル名> 
          のファイルに格納します。この /m オプション以降の <ファイル名> は、
          複数指定できます。
           <モジュール格納ファイル名> に拡張子が無い場合、それに「.mcx 」を
          付加した名称のファイルに格納します。
           <モジュール格納ファイル名> の指定が無い場合( /m だけの場合)は、
          最初にロードされたモジュールの名称に拡張子「.mcx 」を付加した名称
          のファイル名に格納します。
              例:  -m=hello
                    -m=GLib.mcx

    /n=<モジュール内容の説明文>
          モジュールファイルに格納する説明文を指定します。このオプションを
          省略した場合、モジュールの説明文は、空文になります。
          このオプション以降は、それまでに /m オプションがなくても、
          モジュール格納モードに移行します。
              例:  -n="Test Modules"
                    -n="基本ライブラリー"

    /p=<ディレクトリー名>
          カレントパスを、<ディレクトリー名> のディレクトリーに変更します。
          「ディレクトリー名」は、絶対パスでも、現カレントパスからの相対パス
          でも構いません。「ディレクトリー名」の指定が無い場合( /p だけの
          場合)は、現カレントパスを表示します。
              例:  -p=..\src
                    -p="D:\MikoScript\Library"

    /s    内部の処理状態を逐次表示するようになります。

    /v    本コマンドのバージョンを表示します。
    /?    本コマンドの用法を表示します。( /h と同じ )

    /! <実行文>
          指定された <実行文> を直接実行します。このオプションを使用する場合、
          実行対象の <ファイル名> の指定は、無用です。
          DOS/コマンドプロンプトから実行する場合:
            <実行文> は、二重引用符で囲う必要があります。この囲いの中で二重
            引用符を使う時は、その直前に \ を置いてエスケープ表記にする必要
            があります。また、/! と <実行文> の間には、半角空白を入れる必要
            があります。
                 例:  miko /! "print \"hello\";"
          アプリケーションに組み込みの MikoScript を実行する場合:
            基本的に、そのアプリケーション依存します。
            ちなみに、Apsaly テキストエディタの場合、/! 以降は、本言語の
            実行文と同等に扱われます。そのため、<実行文> は、二重引用符
            では囲いません。
                 例:  /! print "hello";

●スクリプトを実行する場合のコマンド形式
  書式:
      <オプション> <ファイル名> <引数>

  説明:
    ・スクリプトの実行では、<オプション> の指定なし、または、/d /m /n 以外の
        <オプション> を使います。
    ・実行対象の <ファイル名> は、必ず1つ指定する必要があります。
    ・<ファイル名> 以降の項は全て、主関数に渡す <引数> になります。
    ・実行対象のソースファイルの拡張子は、慣習上「.mc 」を使いますが、特に制約は
        ありません。ただし、「.mcx 」は、モジュールファイルとして扱われるので、
        使えまません。
    ・実行対象のモジュールファイルの拡張子は、「.mcx 」に限定されます。
    ・<ファイル名> に拡張子が無い場合、<ファイル名> に「.mcx 」を付加した名称の
        ファイルが、モジュールファイルとして実行対象になります。
    ・実行対象がソースファイルの場合、まず、コンパイルされて、中間コードに変換
        されますが、このとき、コンパイルエラーになると実行は行なわれません。

  例:
    ・カレントパスにある hello.mc というソースファイルを引数なしで実行する場合、
      コマンド行は、以下のようになります。
            miko hello.mc
    ・カレントパスよりも1つ上のディレクトリにある test.s というソースファイル
      を、引数 xyz と abc で実行する場合、コマンド行は、以下のようになります。
            miko ..\test.s abc xyz
    ・d:\tools というディレクトリーにある dump.mcx というモジュールファイルを、
      引数 file.dat で実行する場合、コマンド行は、以下のようになります。
            miko d:\tools\dump file.dat

●モジュールファイルを生成する場合のコマンド形式
  書式:
      /m=<モジュール格納ファイル名>  /n=<説明文>  <ファイル名> ...

  説明:
    ・本コマンドでモジュールファイルを生成する場合、必ず /m と /n のオプションの
        両方またはどちらかを、最初に指定する必要があります。
    ・モジュールファイルの生成では、本スクリプト言語で書かれた1つ以上のソース
        ファイルを、それぞれ中間コードに変換して、1つのファイルにまとめて格納
        することができます。また、既に中間コードで格納されている複数のモジュール
        を1つのファイルにまとめて格納することもできます。あるいは、その両方を
        まとめて行なうこともできます。
    ・モジュールファイルの生成では、スクリプトの実行は行なわれません。

  例:
       miko  /m  hello.mc

     を実行すると、カレントパスにある hello.mc というソースファイルがコンパイル
     されて、その中間コードのモジュールファイルが、カレントパスの hello.mcx と
     いうファイルに格納されます。

       miko  /m=..\lib\slib  n="string library"  s1.mc  s2.mc  s3.mc

     を実行すると、カレントパスにある s1.mc と s2.mc と s3.mc の3つのソース
     ファイルがコンパイルされて、その各中間コードのモジュールが、カレントパス
      を基点に ..\lib のディレクトリー内の slib.mcx というモジュールファイルに
     まとめて格納されます。この時、当モジュールの説明文は、"string library" 
     になります。