• ベストアンサー

AWKスクリプト作成法

AWKで次のようなプログラムを作成したいと考えています。 A = B AND C D = E NOT A といったような簡単な論理演算を記述しているプログラムらしきものがあるが、例えば上記の例で2行目でE,Aを使用しているが、その場合はE,Aを使用してDを作るより以前にE,Aを定義していなければならない。このルールを守っていない個所をチェックするAWKスクリプトの 記述法、アルゴリズムを教えて下さい。できれば、更に 不正な記述を修正して並べ換えてくれればベストですが..

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

1カラム目は必ず変数で、2カラム目は必ず「=」ですか? とりあえず、そう仮定します。 例題の1行目もB,Cが未定義になってしまうので、 B C A = B AND C D = E NOT A という入力ファイルということにします。 --logic.awk--(コードの例) #!/bin/awk -f BEGIN{  op["NOT"]  op["AND"]  op["NAND"]  op["OR"]  op["NOR"] } {  print $0  if(NF>0) defined[$1]  if(NF>=3){   for(i=3;i<=NF;i++){    if( !($i in op) ){     if( !($i in defined) ){      print " "$i" is used but not defined."     }    }   }  } } ---- --logic.dat--(入力ファイル) A B C = A AND B D = C AND F ---- --実行例と結果-- $ awk -f logic.awk logic.dat A B C = A AND B D = C AND F  F is used but not defined. $ ---- アルゴリズムを考えても、実際コーディングしてみないとアルゴリズムにバグがあるかもしれないので、コーディングしちゃいました。

関連するQ&A