アットウィキロゴ

[課題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