public class SyntaxConverter extends Object
構文定義と文を与えると、構文定義に従い文を解析し、解析結果の 構文木をXML文字列またはJSON文字列にして返します。
構文定義法、入力解析法などの総合的な説明を パッケージ otsu.symphonieの説明 で行ってありますので、まずご覧ください。
標準的使い方
標準的な使い方は次のようになります。
   SyntaxConverter syn= new SyntaxConverter();    // 変換機生成
   syn.readSyntaxFile("syntax.sn","utf-8");       // 構文定義読み込み
   String xml= syn.parseFile("data.txt","utf-8"
                             ,syn.AS_XML);        // 文解析(XMLで取得)
   String json= syn.parseFile("data.txt","utf-8"
                             ,syn.AS_JSON);       // 文解析(JSONで取得)
ただしjson形式は現在試験中であり、文字列型、数値型の表現分けなどの変更 が入る可能性があります。
symphonieで用意されるその他の解析法
SyntaxConverterの他、symphonieには
(1)構文解析を行い要素毎にアプリケーションに情報を上げる
 SyntaxReader
(2)構文木をXML-DOMで取得する
 SyntaxDom
(3)ファイルを解析し構文木を表示するコマンド
 java -jar symphonie.jar syntax-check
(4)構文解析アプレット(試験中)
 SymphonieApp
などを用意してあります。。
| 修飾子とタイプ | フィールドと説明 | 
|---|---|
| static int | AS_JSONjson文字列を得る | 
| static int | AS_XMLxml文字列を得る(デフォルト) | 
| static int | KEEP_REDUNDANCYトークン値とトークン名が同じでも表示 | 
| static int | NO_ESCAPEXMLで&を実体参照エスケープ(&)にしない | 
| static int | NO_INDENTインデントを付けない | 
| static int | WITH_BEGIN_ENDトークンをタグで囲む | 
| static int | WITH_TYPE(未)json時に値をタイプ別に書き分ける.デフォルトでは全て文字列 | 
| コンストラクタと説明 | 
|---|
| SyntaxConverter() | 
| 修飾子とタイプ | メソッドと説明 | 
|---|---|
| String | parse(BufferedReader br_,
     long option_)構文解析を行い、構文木を文字列(XMLまたはjson)で得る. | 
| String | parseFile(String fileName_,
         long option_)指定ファイルの構文解析を行い、構文木を文字列(XMLまたはjson)で得る. | 
| String | parseFile(String fileName_,
         String charSet_,
         long option_)指定ファイルの構文解析を行い、構文木を文字列(XMLまたはjson)で得る. | 
| String | parseString(String[] text_,
           long option_)指定文字列の構文解析を行い、構文木を文字列(XMLまたはjson)で得る. | 
| String | parseString(String text_,
           long option_)指定文字列の構文解析を行い、構文木を文字列(XMLまたはjson)で得る. | 
| Object | parseToObject(BufferedReader br_)解析結果をObjectで得る(試験中). | 
| Object | parseToObject(String text_)解析結果をObjectで得る(試験中). | 
| static void | printJSON(PrintWriter pr_,
         SyntaxReader sr_,
         long option_,
         boolean dispName_)構文解析を行いjson出力を得る(試験中)。 | 
| void | readSyntax(BufferedReader br_)構文定義を読み込む | 
| void | readSyntaxFile(String fileName_)構文定義ファイルを読む. | 
| void | readSyntaxFile(String fileName_,
              String charSet_)構文定義ファイルを読む. | 
| void | readSyntaxString(String text_)構文定義文字列を読む | 
| void | readSyntaxString(String[] text_)構文定義文字列配列を読む. | 
public static final int NO_ESCAPE
public static final int WITH_BEGIN_END
public static final int WITH_TYPE
public static final int KEEP_REDUNDANCY
public static final int NO_INDENT
public static final int AS_JSON
public static final int AS_XML
public void readSyntaxFile(String fileName_) throws Exception
fileName_ - 構文定義ファイルException - 読み込み/解析失敗public void readSyntaxFile(String fileName_, String charSet_) throws Exception
fileName_ - 構文定義ファイルcharSet_ - ファイルの文字コードException - 読み込み/解析失敗public void readSyntaxString(String text_) throws Exception
text_ - 構文定義記述Exception - 解析失敗public void readSyntaxString(String[] text_) throws Exception
配列の各要素は行と見なされます。文字列自体に改行は入れないでください。
text_ - 構文定義記述Exception - 解析失敗public void readSyntax(BufferedReader br_) throws Exception
br_ - 構文定義の媒体Exception - 解析失敗public String parseFile(String fileName_, long option_) throws Exception
予めreadSyntax関数群でセットされた
構文定義に基づき構文解析を行い、結果を
XML文字列またはjson文字列による構文木で得ます。
option_で表示形式が指定できます。
| 値 | 説明 | 
| AS_JSON | 結果をjsonで得ます。 | 
| AS_XML | 結果をXMLで得ます。これはデフォルトであり、指定の必要はありません。 | 
| NO_ESCAPE | XML出力で&を実体参照エスケープ(&)しません。 | 
| WITH_BEGIN_END | XML出力でトークンをタグで囲みます。 | 
| KEEP_REDUNDANCY | XML出力でトークン名とトークン値が同じでもトークン値を 省略しません。WITH_BEGIN_END指定の場合常にトークン値は 出ますので、この指定は意味を持ちません。 | 
| NO_INDENT | XML,JSON両出力共通で、インデント無しにします。 | 
fileName_ - 入力ファイル名option_ - 表示オプションException - 解析失敗public String parseFile(String fileName_, String charSet_, long option_) throws Exception
fileName_ - 入力ファイル名charSet_ - 入力ファイルの文字コードoption_ - オプションparseFile(String,long)参照Exception - 解析失敗public String parseString(String text_, long option_) throws Exception
text_ - 解析すべき文字列option_ - オプションparseFile(String,long)参照Exception - 解析失敗public String parseString(String[] text_, long option_) throws Exception
文字列配列による文を解析します。
配列の各要素は行と解釈されます。文字列自体には改行コードを入れない
でください。
text_ - 解析すべき文字列option_ - オプションparseFile(String,long)参照Exception - 解析失敗public String parse(BufferedReader br_, long option_) throws Exception
br_ - 解析すべき文の媒体option_ - オプションparseFile(String,long)参照Exception - 解析失敗public Object parseToObject(BufferedReader br_) throws Exception
解析結果は次の型のObject構成となります。
br_ - 解析すべき文の媒体Exception - 解析失敗public Object parseToObject(String text_) throws Exception
解析結果は次の型のObject構成となります。
text_ - 解析すべき文Exception - 解析失敗public static void printJSON(PrintWriter pr_, SyntaxReader sr_, long option_, boolean dispName_) throws Exception
pr_ - 出力先sr_ - 構文定義と解析すべき文がセットされたSyntaxReaderoption_ - オプションparseFile(String,long)参照dispName_ - 構造の要素として名前を出す。falseを指定することException - 解析失敗