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_
- 第一引数がコマンド名、第二引数以降がパラメタとなります