문제

(AB)를 사용하여 TCL C-API를 사용하여 문자열을 '구문 분석'하고 모든 대체품 (사각형 브래킷의 하위 명령 포함)을 수행하지만 실제로 명령 줄을 평가하기 전에 중지하는 방법이 있습니까?

내가하려는 것은 명령을 만드는 것입니다 (C, 그러나 우아한 방법이 있다면 TCL-WRAPPER를 수행하는 것을 고려할 것입니다. -끈). 나는 그 블록을 가져 가서 나누고 실행되는 것과 같은 방식으로 대체물을 수행하고 싶지만, 거기에서 멈추고 결과 선을 대신 해석하고 싶다.

나는 모든 유효한 첫 번째 단어가 명령으로 정의되는 네임 스페이스를 작성하는 것을 고려했지만이 목록은 너무 광대하고 (그리고 거의 역동적이기 때문에) 너무 번거롭게됩니다. 나는 또한이 접근법을 시도했지만 unknown 다른 명령을 가로 채도록 명령. 하지만, unknown 많은 것들에 사용되며 네임 스페이스에 묶일 수 없으므로 블록을 실행할 때마다 정의하고 내가 끝났을 때 이전에 무엇이든지 다시 설정해야합니다. 또한 실제 명령과 충돌하는 위험 (상당히 낮은 위험이지만 0은 아님)을 실행하므로 사용하지 않는 것을 선호합니다. unknown 명령.

내가 얻을 수있는 가장 가까운 것은입니다 Tcl_ParseCommand (그리고 나머지 가족)는 수동으로 평가할 수있는 구문 분석 트리를 생성합니다. 더 나은 해결책이 없다면 이런 식으로 할 것 같아요. 그러나 '공식적인'방법이 있다면 물론 선호합니다 ..

내가 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

보세요 tcl_substobj. 그것은 [subs] 명령과 동일하며, 당신이 찾고있는 것으로 보입니다.

귀하가 귀하의 의견에서 알 수 있듯이, Subs는 당신이 원하는 일을하지 않습니다. 도움이되면 다음 TCL 코드가 원하는 것일 수 있습니다.

> set mydata {mylist item $listitem group item {$group item}}
> set listitem {1 2 3}
> subst $mydata      ;# error: can't read "group": no such variable
> proc groupsubst {data} {
    return [uplevel 1 list $data]
}
> groupsubst $mydata ;# mylist item {1 2 3} group item {$group item}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top