2012-09-21 3 views
1

글쎄, 저는 tcl에 대한 많은 경험이 없지만 몇 가지 테스트 케이스를 작성하는 동안 갑자기 complier가 계속 을 놓쳤다 '}'라고 말하면서 나는 50 대 60의 버팀대 쌍을 모두 통과 시켜서 모든 것이 옳았는지 확인해야했다. 그리고이 실수에 대해 1.5 시간을 소비 한 후에 잊어 버린 것을 발견하는 것이 정말 짜증났다. '}' 내 의견을 종료하는 것은 그래서 다음왜 닫는 중괄호 '{'를 사용하여 닫는 중괄호 '}'를 닫는 것을 잊었을 때 TCL에서 오류를 내게합니까

#test XmlDAOTest-1.15 {Test XmlDAO - method - 'ProcessCDATASectionNode'\ 

그래서 당신이 볼 경우 내 댓글에 코드입니다, 내가 라인을 주석하고 주석은 컴파일 될 필요가 없으며 구문을 검사해야하기 때문에 컴파일러에서 결과를 얻은 '\'다음에 '}'를 추가 한 후에 만 ​​'}'과 함께 닫지 않았습니다. 나는 다음을 사용하고

IDE - Eclipse Indigo Version of Tcl - Tcl/Tk 8.5 with tclOO 

Version: Indigo Service Release 2 Tcltest, tDom all included 

Build id: 20120216-1857 

나는이 IDE의 측면에 결함 또는 그 TCL/TK에 고유 있는지 알고 싶어하고 TCL에 문제가있는 경우 더 이상 이런가 당신을 마주 친다.

+0

대부분의 IDE는 Tcl의 실제 코멘트 규칙을 이해하지 못합니다. 실제 규칙은 대부분의 언어와 약간 다릅니다. 거기에 변화가있을 실제 전망이 없습니다 ... –

+2

이유는 Tcl 위키에 설명되어 있습니다 : [Tcl 주석에 중괄호를 쓸 수없는 이유는 무엇입니까] (http://wiki.tcl.tk/462) –

답변

1

표시되는 문제는 IDE가 아닌 Tcl 때문입니다. 즉, Tcl의 "문제"가 아니라 코드가 파싱되는 방식의 인공물입니다. Tcl에서 has 기호는 명령을 시작하는 데 유효한 위치에 주석을 시작하기 때문에 나머지 코드와 동시에 주석을 파싱해야합니다. 주석을 제거하기 위해 코드가 "사전 처리되지"않았기 때문에 따옴표와 중괄호의 균형을 조정해야합니다.

는 당신에게 구문 분석이 방법을 수행하는 이유의 예를 제공하기 위해 : 위의 줄에

set x #abc 

를, x의 값은 #abc입니다. 주석이 사전 처리 된 경우 위의 내용은 set x으로 변환되고 나머지는 사라집니다. 같은 라인을 따라

, 많은 사람들이 의견에 의해 물리지 다른 장소 :

switch -exact -- $myvalue { 
    # this is not a comment 
    "a value" { do something } 
    "another value { do something } 
} 
위에서

, #, isa는 모든 경우를 전환 할 수 있습니다; 당신은 또한 (같은 일이다) 그것을 이런 식으로 볼 수 있습니다

switch -exact -- $myvalue { 
    "#" { this } 
    "is" { not } 
    "a" { comment } 
    "a value" { do something } 
    "another value" { do something } 
} 

그 이유는이 경우 값을 찾고 스위치 문의 내부가, 명령에 대한 올바른 장소되지 않는 것입니다 . 따라서 #은 다른 일반 문자와 동일한 일반 문자입니다.

+0

Computer Languages! huh !, 최근에 나는 프로그래밍 언어를 배우는 것에 대한 나의 접근법이 얼마나 잘못되었는지 깨닫게되었습니다. – NANDAGOPAL

+0

문제를 해결하고 문제가 발생하는 이유를 알아 내려고 도움을 요청하십시오. 새로운 언어를 배울 수있는 더 나쁜 방법이있는 것 같습니다. :) – RHSeeger

2

줄 끝의 '\는 연속 마커이기 때문에 다음 줄을 주석으로 끌어 올 수 있습니다.

#puts "1";\ 
puts "2"; 
puts "3"; 

두 번째 줄이 주석의 일부로 취급되기 때문에 3을 출력합니다.

+0

당신이 옳습니다. 당신의 대답을 읽은 후에 나는 연속 마커없이 똑같은 것을 시도했지만 그것은 여전히 ​​나에게 오류를 준다.나는 '#'이 테스트 케이스 { '라고 입력하고 여전히'{ '}'와 함께 닫지 않으면 같은 오류가 발생합니다. 시도해 봐야합니다. – NANDAGOPAL

+0

'}'이 (가) 있어야합니다 댓글도 달지 않은 댓글을 닫으시겠습니까? 아마도 몇 줄의 코드를 볼 필요가있을 것입니다. – John3136

+2

이것은 사실입니다. 그러나 바깥 쪽 쌍의 중괄호 안쪽에있는 경우,'}'부족으로 인해 문제가 발생합니다 (바깥 쪽 쌍의 간단한 중괄호 개수 처리 규칙을 충족시키기 위해 균형을 유지해야하므로). 엄지 손가락의 내 규칙은 "항상 괄호 균형을 잡을 필요가없는 경우에도"입니다. –