Sesuatu fungsi adalah dalam bentuk
(operator arg1 arg2 ... argn)
iaitu, simbol operasi, parameter 1, parameter 2, sehingga parameter n. Parameter itu sendiri juga boleh menjadi fungsi dalam format ini.
Sebagai contoh, rentetan seperti ini
String="(tambah (tambah 1 2) (mul 2 1) 2 )"
perlu dibahagikan kepada operan dan parameternya, iaitu dibahagikan kepada
["tambah","(tambah 1 2)","(mul 2 1)","2"]
Bagaimanakah susunan aksara sedemikian harus dibahagikan?
Pendekatan semasa saya adalah untuk mengeluarkan kurungan paling luar setiap kali, dan kemudian ingin menggunakan ruang untuk membelah rentetan, tetapi ruang di tengah juga akan menjadi tempat untuk dibelah. Jika anda menggunakan ungkapan biasa, memandangkan setiap parameter mungkin masih mempunyai kurungan bersarang di dalamnya, bagaimanakah keadaan ini harus dipadankan?
前缀表示法
,S-表达式
,Lisp表达式
bisu
S-表达式
是多层嵌套的树形结构,比较接近抽象语法树(AST)
.Lazim sukar dihuraikan tanpa tatabahasa rekursif
S-表达式
.Berikut adalah contoh mudah dalam python saya telah mengulasnya dan ia sepatutnya mudah difahami.
S-ungkapan
Biasa:
Perhatikan bahawa regex ini mempunyai parameter Global
Jika
arg1, arg2, arg3, ... argn
中嵌套(op arg ...)
hanya ada satu lapisan sahaja boleh guna cara ni