Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


393 / 76735 ←次へ | 前へ→

【82009】Re:A AND B OR (C OR D)をOR(AND(A,B),OR(C,D))に変換するアルゴリズム
発言  とおりすがり  - 22/4/4(月) 1:59 -

引用なし
パスワード
   構文木が取得できる言語であれば、例えば、以下のように書けます。
VBAだと難しいでしょう。
(簡単なものに限定すれば、ヒューリスティックな解法があるかもしれません)

s = "A AND B OR (C OR D)" の変換結果は、
  "OR(AND(A, B), OR(C, D))"となります。

function test()
  s = "A AND B OR (C OR D)"        
  s = replace(s, "AND" => "&&" , "OR" => "||" )
  a = Meta.parse(s)  # Expr型(AST表現)に変換
  return recursive(a)
end

function recursive(a)
  head = a.head
  args1,args2 = a.args
  
  if typeof(args1) == Expr
    ele1 = recursive(args1)
  else
    ele1 = string(args1)
  end

  if typeof(args2) == Expr
    ele2 = recursive(args2)
  else
    ele2 = string(args2)
  end

  if head == :&&
    return "AND(" * ele1 * ", " * ele2 * ")"
  elseif head == :||
    return  "OR(" * ele1 * ", " * ele2 * ")"
  end  
end

test()
7 hits

【82003】A AND B OR (C OR D)をOR(AND(A,B),OR(C,D))に変換するアルゴリズム しょうち 22/3/26(土) 22:10 質問[未読]
【82004】Re:A AND B OR (C OR D)をOR(AND(A,B),OR(... よろずや 22/3/27(日) 13:18 発言[未読]
【82005】Re:A AND B OR (C OR D)をOR(AND(A,B),OR(... しょうち 22/3/28(月) 9:01 お礼[未読]
【82009】Re:A AND B OR (C OR D)をOR(AND(A,B),OR(... とおりすがり 22/4/4(月) 1:59 発言[未読]

393 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free