関数は
(operator arg1 arg2 ... argn) の形をしています。
はパラメータ 1、パラメータ 2、パラメータ n までの演算記号です。パラメーター自体をこの形式の関数にすることもできます。
たとえば、次のような文字列です。
String="(add (add 1 2) (mul 2 1) 2 )"
オペランドとパラメータを分割する必要があります。つまり、 # に分割します。
このような文字配列はどのように分割すればよいでしょうか?
私の現在のアプローチでは、毎回一番外側の括弧を削除し、スペースを使用して文字列を分割したいと考えていますが、真ん中のスペースも分割される場所になります。正規表現を使用する場合、各パラメーターの内部にまだ入れ子になった括弧が含まれている可能性があるため、この状況をどのように照合すればよいでしょうか?
前缀表示法
,S-表达式
,Lisp表达式
リスプ
S-表达式
是多层嵌套的树形结构,比较接近抽象语法树(AST)
。正規は再帰文法なしでは解析が困難です
S-表达式
。以下はPythonでの簡単な例です。コメントしたので、理解しやすいはずです。
リーリー リーリーS表現
レギュラー:
リーリーこの正規表現にはグローバルパラメータがあることに注意してください
レイヤーが 1 つしかない場合は、この方法を使用できます
arg1, arg2, arg3, ... argn
中嵌套(op arg ...)