public class COMMAND extends Object
symphonie.jarの起動エントリーとなっています。
symphonie.jarには次のユーティリティプログラムが組まれており、 それらの起動を行います。
構文定義法、入力解析法などの総合的な説明を パッケージ otsu.symphonieの説明 で行ってありますので、まずご覧ください。
syntax-check 構文&XML形式ダンプコマンド
構文定義に基づき、文字列を解析し、その構文構造をXMLの形で 出力します。
起動形式:
java -jar symphonie.jar syntax-check
     -syntax|-syntax-obj 構文定義ファイル
     -source 解析するテキストファイル [-out 出力ファイル名]
    [-encoding 文字コード] [-outEncoding 文字コード] [-xml]
    [-no_header] [-token] [-line] [-with_name]
    [-with_begin_end] [-keep_redundancy] [-no_escape] [-no_error]
| キー | 値 | 説明 | 
| -syntax | 構文定義記述ファイル | 構文定義ファイルを指定します | 
| -syntax-obj | 構文定義objectファイル | 構文定義objectファイルを指定します。 create-syntax-objectコマンドで 生成したファイルあるいは SyntaxReader.writeSyntaxObjectFile(String)で構文定義を出力したファイルです。 | 
| -source | 解析するテキストファイル | 構文解析を行うテキストファイルを指定します。 | 
| -out | 出力ファイル | 出力ファイルを指定します。 無指定時は標準出力となります。 | 
| -encoding | 文字コード | ファイルの文字コードを指定します。無指定時はUTF-8
となります。 構文定義ファイル、解析するテキストファイル、 出力ファイル共通です。 -xmlを指定してある場合XML宣言のencodingにも 設定されます。 | 
| -outEncoding | 文字コード | 出力の文字コードを指定します。-outでファイルを開く場合 この指定に従います。省略時は-encoding指定に従います。 | 
| -xml | XML形式とします。 (1)ネストを示す縦棒を入れません。 (2)XML宣言 <?xml version="1.0" encoding="utf-8" ?> を先頭に付加します。 | |
| -no_header | XML出力時にXMLヘッダーを省略します | |
| -token | トークン読み込みと構文解析結果を表示します。 | |
| -line | 入力行をXMLコメントの形で表示します。 | |
| -with_name | フレーズを<phrase name="名前">、トークンを<token name="名前" text="テキスト"
の形で表示します。 フレーズのデフォルト時例: <NAME> フレーズの指定時例: <phrase name="NAME"> トークンのデフォルト時例: <NAME text="abc"> トークンの指定時例: <token name="NAME" text="abc"> | |
| -with_begin_end | トークンをタグに挟まれた形で表示します。 デフォルト時例: <NAME text="abc"> 指定時例: <NAME(gt;abc<NAME> | |
| -keep_redundancy | 固定トークンでトークン名とテキストが同じ
でもテキスト情報を出します デフォルト時例: <abc/> 指定時例: <abc text="abc"/> | |
| -no_escape | XML出力で、&を&に置き換えません。 例えば、-xml -with_begin_end指定で次の結果が得られる場合。 <mo>&PlusMinus;</mo>この指定があれば、 <mo>±</mo>となります。 | |
| -no_error | ioエラーや構文エラー等のException情報を 出力ファイルに書かず標準エラーにのみ 書きます。 | 
例えば次のように起動します。
set COMMAND= ..\..\..\libD\symphonieD.jar syntax-check java -jar %COMMAND% -syntax sampleSyntax.sn -source sample.txt -out dump.txt
以下にsampleSyntax.sn構文定義を用い次のsample.txtを構文解析した例を載せます。
a : b c d e : f
表示オプション無し
<defs> | <def> | | <NAME text="a" /> | | <name-list> | | | <NAME text="b" /> | | | <NAME text="c" /> | | | <NAME text="d" /> | | </name-list> | </def> | <def> | | <NAME text="e" /> | | <name-list> | | | <NAME text="f" /> | | </name-list> | </def> </defs>
XML表示(-xml)の例
<?xml version="1.0" encoding="utf-8" ?>
<!-- syntax tree of sampleData2.txt -->
<defs>
   <def>
      <NAME text="a" />
      <name-list>
         <NAME text="b" />
         <NAME text="c" />
         <NAME text="d" />
      </name-list>
   </def>
   <def>
      <NAME text="e" />
      <name-list>
         <NAME text="f" />
      </name-list>
   </def>
</defs>
入力行表示(-line)の例
<!-- (1) a : b c d --> <defs> | <def> | | <NAME text="a" /> | | <name-list> | | | <NAME text="b" /> | | | <NAME text="c" /> <!-- (2) e : f --> | | | <NAME text="d" /> | | </name-list> | </def> | <def> | | <NAME text="e" /> | | <name-list> <!-- EOF --> | | | <NAME text="f" /> | | </name-list> | </def> </defs>
トークン表示(-token)の例
a          <defs>
           |  <def>
           |  |  <NAME text="a" />
:          
b          |  |  <name-list>
c          |  |  |  <NAME text="b" />
d          |  |  |  <NAME text="c" />
e          |  |  |  <NAME text="d" />
:          |  |  </name-list>
           |  </def>
           |  <def>
           |  |  <NAME text="e" />
f          |  |  <name-list>
< EOF >    |  |  |  <NAME text="f" />
           |  |  </name-list>
           |  </def>
           </defs>
create-const-class 構文要素名定数を持つクラスの生成
構文定義を次の形式でファイル出力します。
SyntaxReader.readSyntaxObjectFile(String)
で読ませることにより、最初の定義チェック工程を
省くことが出来ます。起動形式:
java -jar symphonie.jar create-const-class
     -syntax|-syntax-obj 構文定義ファイル  [-encoding 文字コード]
     [-class 生成するクラス名] [-package パッケージ名]
     [-out|-out-obj 出力ファイル] [-token_prio] [-errdisp]
| キー | 値 | 説明 | 
| -syntax | 構文定義ファイル | 構文定義ファイルを指定します。 | 
| -syntax-obj | 構文定義objectファイル | 構文定義objectファイルを指定します。 create-syntax-objectコマンドで 生成したファイルあるいは SyntaxReader.writeSyntaxObjectFile(String)で構文定義を出力したファイルです。 | 
| -encoding | 文字コード | 場合文字コードを指定
します。デフォルトはUTF-8です。 -outで出力ファイルを指定してある 場合、その文字コードもこのコードと なります。 | 
| -class | 生成するクラス名 | クラス名を指定します。 無指定時は SyntaxElementNamesとなります。 | 
| -package | パッケージ名 | 生成するクラスのパッケージ名を指定します。 無指定時はパッケージ無しです。 | 
| -out | 生成するファイル名 | 生成するファイル名を指定します。 無指定時は 標準出力となります。 -out-objが指定されると、-out-objが優先されます。 | 
| -out-obj | 生成する構文定義オブジェクトファイル名 | 生成するファイル名を指定します。 | 
| -tokenprio | トークンのパターンの衝突がある場合優先度をコメントの形で出力します。 例えば正規表現"[a-zA-Z]*"と単純文字列"name"といったパターンが トークンとして定義されている場合 // name has priority over [a-zA-Z][0-9a-zA-Z]* という表示が出ます | |
| -errdisp | ファイルioエラーや構文定義エラー他のExceptionが 発声した場合、標準エラーだけでなく、出力ファイル にもその内容を出力します。 | 
メンバ名はハイフンその他javaの要素名に使えない 文字をアンダースコアに変えたものとなります。
例えば次の構文を
// sampleSyntax.sn
@         ::= ?"[ \t\n ]+" 
@         ::= ?"//.*$" 
@NAME     ::= ?"[a-zA-Z][0-9a-zA-Z]*" 
defs      ::= { def } 
def       ::= NAME ":" [name-list]
name-list ::= { NAME }
次のように与えると
SET COM=java -jar ..\..\..\libD\symphonieD.jar create-const-class %COM% -syntax sampleSyntax.sn -class C -out C.java
次の結果が得られます。
public class C {
   public final static String defs="defs";
   public final static String def="def";
   public final static String name_list="name-list";
   public final static String NAME="NAME";
   }
構文解析においてこのクラスは必須ではありませんが、 つづりミスをコンパイル時に発見できるため、無用の 混乱を防ぐことができます。
   sr.readBegin("Name-list");//つづりを間違えると実行時にチェックされる
   sr.readbegin(C.Name_list);//つづりを間違えるとコンパイル時にチェックされる
create-syntax-object 構文定義オブジェクトファイル作成
構文定義オブジェクトをバイナリ出力します。
このファイルを作成しておけば、テキストに
よる構文定義読み込みの代わりにこのファイルを
SyntaxReader.readSyntaxObjectFile(String)
で読ませることにより、最初の定義チェック工程を
省くことが出来ます。
起動形式:
java -jar symphonie.jar create-syntax-object
     -syntax|-syntax-obj 構文定義ファイル -out 出力ファイル
     [-encoding 文字コード]
| キー | 値 | 説明 | 
| -syntax | 構文定義記述ファイル | 構文定義記述ファイルを指定します。 | 
| -syntax-obj | 構文定義objectファイル | 構文定義objectファイルを指定します。 create-syntax-objectコマンドで 生成したファイルあるいは SyntaxReader.writeSyntaxObjectFile(String)で構文定義を出力したファイルです。 | 
| -encoding | 文字コード | 場合文字コードを指定 します。デフォルトはUTF-8です。 | 
| -out | 生成するファイル名 | 生成するファイル名を指定します。 | 
diff 簡易のテキストファイル比較
2つのテキストファイルを比較する簡易diffコマンドです。
比較に際し無視する行や、無視する文字列パターンを指定することが
できます。
例えば試験結果とリファレンスの比較を行う場合、物理アドレス部
など毎回異なる部分は、
チェックしないといった形での検証に使います。
詳しい説明はhiNoteパッケージのCOMMANDクラスにあります。
conv 簡易のテキスト変換
簡易の部分文字列変換コマンドです。
対象文字列は単純文字列または正規表現で指定します。
ファイルを入出力とすることも、標準入力から標準出力へ出すことも可能です。
詳しい説明はhiNoteパッケージのCOMMANDクラスにあります。
genDataClass 指定ファイル内容をデータとして持つクラス生成
詳しい説明はhiNoteパッケージのCOMMANDクラスにあります。
genDataClass 16進ダンプ
詳しい説明はhiNoteパッケージのCOMMANDクラスにあります。
public static void main(String[] args_)
args_ - 第一引数がコマンド名、第二引数以降がパラメタとなります