Une fonction a la forme de
(opérateur arg1 arg2 ... argn)
c'est-à-dire le symbole d'opération, paramètre 1, paramètre 2, jusqu'au paramètre n. Le paramètre lui-même peut également être une fonction dans ce format.
Par exemple, une chaîne comme celle-ci
String="(add (add 1 2) (mul 2 1) 2 )"
doit être divisée en ses opérandes et paramètres, c'est-à-dire divisée en
["ajouter","(ajouter 1 2)","(mul 2 1)","2"]
Comment un tel tableau de caractères doit-il être divisé ?
Mon approche actuelle consiste à supprimer les crochets les plus à l'extérieur à chaque fois, puis à utiliser des espaces pour diviser la chaîne, mais les espaces au milieu deviendront également l'endroit à diviser. Si vous utilisez des expressions régulières, puisque chaque paramètre peut toujours contenir des parenthèses imbriquées, comment cette situation doit-elle être adaptée ?
前缀表示法
,S-表达式
,Lisp表达式
lisp
S-表达式
是多层嵌套的树形结构,比较接近抽象语法树(AST)
.Regular est difficile à analyser sans grammaire récursive
S-表达式
.Ce qui suit est un exemple simple en python. Je l'ai commenté et il devrait être facile à comprendre.
S-expression
Régulier :
Notez que cette regex a un paramètre Global
S'il
arg1, arg2, arg3, ... argn
中嵌套(op arg ...)
il n'y a qu'un seul calque, vous pouvez utiliser cette méthode