ホームページ  >  に質問  >  本文

java - (演算子 arg1 arg2 ... argn) の形式の文字列を分割するにはどうすればよいですか?

関数は
(operator arg1 arg2 ... argn) の形をしています。
はパラメータ 1、パラメータ 2、パラメータ n までの演算記号です。パラメーター自体をこの形式の関数にすることもできます。
たとえば、次のような文字列です。
String="(add (add 1 2) (mul 2 1) 2 )"
オペランドとパラメータを分割する必要があります。つまり、 # に分割します。

##["加算","(加算 1 2)","(乗算 2 1)","2"]

このような文字配列はどのように分割すればよいでしょうか?

私の現在のアプローチでは、毎回一番外側の括弧を削除し、スペースを使用して文字列を分割したいと考えていますが、真ん中のスペースも分割される場所になります。正規表現を使用する場合、各パラメーターの内部にまだ入れ子になった括弧が含まれている可能性があるため、この状況をどのように照合すればよいでしょうか?

世界只因有你世界只因有你2674日前919

全員に返信(2)返信します

  • 仅有的幸福

    仅有的幸福2017-06-23 09:15:59

    前缀表示法S-表达式Lisp表达式

    リスプS-表达式是多层嵌套的树形结构,比较接近抽象语法树(AST)

    正規は再帰文法なしでは解析が困難ですS-表达式

    以下はPythonでの簡単な例です。コメントしたので、理解しやすいはずです。

    リーリー リーリー

    S表現

    返事
    0
  • 阿神

    阿神2017-06-23 09:15:59

    レギュラー:

    リーリー

    この正規表現にはグローバルパラメータがあることに注意してください

    レイヤーが 1 つしかない場合は、この方法を使用できますarg1, arg2, arg3, ... argn中嵌套(op arg ...)

    返事
    0
  • キャンセル返事