[課題9]
独自仕様を考案して実装せよ.
- LEX,MEA仕様の競合戦略解消プログラム作成中…
- でも精度悪い
- オペレータをファイル読み込み出来るメソッド作成 -- こーへ (2010-12-06 23:51:57)
- initOperatorsメソッドを以下のように変更
- ここではoperatorsとOperatorクラスのIF,ADD,DELETEはVectorからArrayListに変更している
/*
* ファイルからオペレータを読み込むメソッド
* ファイルの書き方の例は
*
* NAME RULE
* IF pattern1
* patten2
* ADD addition
* DELETE remove
*
* @param ファイル名
* @ret 読み込み成功時は0,Exception時は-1,読み込み途中で失敗した場合は途中までの行数
*/
private int initOperators(String filename) {
operators = new ArrayList<Operator>();
try{
BufferedReader bf = new BufferedReader(new FileReader(filename));
String line = bf.readLine();
int errorLine = 1;
//System.out.println(errorLine +":"+line);
while(true) {
if(line == null){
return errorLine;
}
String name = null;
ArrayList<String> theIfList = new ArrayList<String>();
ArrayList<String> theAddList = new ArrayList<String>();
ArrayList<String> theDeleteList = new ArrayList<String>();
while(!line.startsWith("NAME")){
line = bf.readLine();
errorLine++;
System.out.println(errorLine +":"+line);
if(line == null){
return errorLine;
}
}
name = (line.replace("NAME", "").trim());
line = bf.readLine();
errorLine++;
//System.out.println(errorLine +":1"+line);
if(line == null){
return errorLine;
}
line = line.trim();
while(!line.startsWith("IF")){
line = bf.readLine();
errorLine++;
//System.out.println(errorLine +":"+line);
if(line == null){
return errorLine;
}
}
line = (line.replace("IF", "")).trim();
while(line != null && ! line.startsWith("ADD") && ! line.startsWith("DELETE")){
if(line.length() != 0){
theIfList.add(line);
}
line = bf.readLine();
errorLine++;
//System.out.println(errorLine +":"+line);
if(line != null){
line = line.trim();
}
}
if(line != null && line.startsWith("ADD")){
line = (line.replace("ADD", "")).trim();
while(line != null && ! line.startsWith("DELETE") && ! line.startsWith("NAME")){
if(line.length() != 0){
theAddList.add(line);
}
line = bf.readLine();
errorLine++;
//System.out.println(errorLine +":"+line);
if(line != null){
line = line.trim();
}
}
}
if(line != null && line.startsWith("DELETE")){
line = (line.replace("DELETE", "")).trim();
while(line != null && ! line.startsWith("NAME")){
if(line.length() != 0){
theDeleteList.add(line);
}
line = bf.readLine();
errorLine++;
//System.out.println(errorLine +":"+line);
if(line != null){
line = line.trim();
}
}
}
if(name != null &&
theIfList != null &&
(theAddList.size() != 0 ||
theDeleteList.size() != 0 )){
operators.add(new Operator(name,theIfList,theAddList,theDeleteList));
if(line == null){
break;
}
} else {
bf.close();
//ERROR
return errorLine;
}
}
bf.close(); // Reader を閉じる
return 0;
} catch (FileNotFoundException e){
e.printStackTrace();
return -1;
} catch (IOException e){
e.printStackTrace();
return -1;
}
}
- 文字コードは考えてないっす
- 返ってくる数字は大体のエラーが起こった場所
- NAME,IF,ADD,DELETEは大文字のみ
- ADD,DELETEリストはどっちかが空でも可
- 相当ひねくれてファイル書かない限りは大丈夫なはず
最終更新:2010年12月07日 01:05