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