함수는
(연산자 arg1 arg2 ... argn)
즉, 연산 기호, 매개변수 1, 매개변수 2, 매개변수 n까지의 형태입니다. 매개변수 자체도 이 형식의 함수일 수 있습니다.
예를 들어, 다음과 같은 문자열은
String="(add (add 1 2) (mul 2 1) 2 )"
을 피연산자와 매개변수로 나누어야 합니다. 즉,
["추가","(추가 1 2)","(mul 2 1)","2"]
이러한 문자 배열은 어떻게 나누어야 할까요?
현재 접근 방식은 매번 가장 바깥쪽 괄호를 제거한 다음 공백을 사용하여 문자열을 분할하려는 것이지만 중간에 있는 공백도 분할되는 장소가 됩니다. 정규식을 사용하는 경우 각 매개변수 내부에 여전히 중첩된 괄호가 있을 수 있으므로 이 상황을 어떻게 일치시켜야 합니까?
前缀表示法
,S-表达式
,Lisp表达式
lisp
S-表达式
是多层嵌套的树形结构,比较接近抽象语法树(AST)
.정규형은 재귀 문법 없이는 구문 분석하기 어렵습니다
S-表达式
.다음은 Python으로 작성된 간단한 예입니다. 주석을 달았으니 이해하기 쉬울 것입니다.
으아악 으아악S 표현
일반:
으아악이 정규식에는 전역 매개변수가 있습니다
레이어가 1개뿐인 경우
arg1, arg2, arg3, ... argn
中嵌套(op arg ...)
이 방법을 사용할 수 있습니다