2011-11-17 8 views
6

मैंने कुछ कोड विकसित किया है, और मुझे लिनक्स मशीन पर टीसीएल दुभाषिया की त्रुटि फ़्लैगिंग के साथ समस्या का सामना करना पड़ रहा है।टीसीएल स्क्रिप्ट्स में त्रुटियों का स्टेटिक डिटेक्शन

#!/usr/bin/tclsh 
if {1} { 
    puts "abc1" 
} elseif {} { 
    puts "abc2" 
} 

ऊपर कोड "elseif" हालत के लिए त्रुटि फ़्लैग नहीं हो रहा है, जब तक यह elseif हालत में हो। इस तरह की टाइपो त्रुटि अनजाने में जांचने का कोई तरीका है।

अग्रिम धन्यवाद!

+1

एक अच्छा वाक्य रचना अपने संपादक मदद कर सकता है में प्रकाश डाला के लिए त्रुटि संदेश निम्न उत्पादन। – schlenk

+0

@schlenk जैसे ...? – Thufir

उत्तर

2

डोनाल के उत्तर पर विस्तार करने के लिए, टीसीएल को संकलन समय में त्रुटियां नहीं मिलती हैं क्योंकि सामान्य स्थिति में यह नहीं किया जा सकता है, अगर किसी आदेश को निष्पादित किया गया है, तो अगर आदेश कमांड को फिर से परिभाषित किया गया हो, तो यह मान्य हो सकता है, एकमात्र तरीका

gets stdin input 
if {$input == "fail"} { 
    rename if if_ 
    proc if {arg1 arg2 arg3} { 
    puts "ha ha" 
    } 
} 
if {1} { puts "success"} 

स्पष्ट रूप से यह असंभव है स्थिर निर्धारित करने के लिए करता है, तो {1} लाइन है: यदि यह मामला है निर्धारित करने के लिए

इस स्क्रिप्ट पर विचार (यानी इस हॉल्टिंग समस्या है) कोड को चलाने के लिए है प्रोग्राम चलाने के बिना तर्कों की सही संख्या

टीसीएल में वास्तव में कोई वाक्यविन्यास नहीं है, कोई भी कंपाइलर जांच नहीं कर सकता है, सबसे अच्छा आप लिंट स्टाइल चेतावनियां कर सकते हैं, जो केवल कुछ मामलों में सटीक होगा

5

टीसीएल संकलन समय में त्रुटियों को नहीं ढूंढता है, और उपरोक्त नमूने में यह निर्धारित किया जा सकता है कि इसे पहले स्थान पर elseif खंडों की जांच करने की आवश्यकता नहीं होगी; यह केवल पहले puts मुद्दों को इंगित करता है।

अब, जहां एक गैर-तुच्छ पहली शर्त है, तो यह मामला है कि elseif अभिव्यक्ति में त्रुटियों तक पहुंचने तक रिपोर्ट नहीं की जाती है। इस प्रकार टीसीएल के अर्थशास्त्र - और विशेष रूप से if कमांड को परिभाषित किया गया है; कमांड के निष्पादन के समय मूल्यांकन में त्रुटियां (सकल प्रमुख वाक्यविन्यास के विपरीत) की सूचना दी जाती है। मैं इसके साथ आपकी निराशा को समझ सकता हूं, और सुझाव देता हूं कि आप स्थिर वाक्यविन्यास विश्लेषण उपकरण पर Tcler's Wiki page देखें, जो आपके लिए संभावित समस्याओं को ध्वजांकित कर सकता है (बहुत मामूली धारणाओं के तहत जो वास्तव में हमेशा सत्य हैं)। विशेष रूप से, मैंने Frink और the checker tool in TDK (बाद वाला एक वाणिज्यिक उपकरण है, लेकिन बहुत उच्च गुणवत्ता वाला) के बारे में अच्छी बातें सुनी हैं।

+3

[नागफेल] (http://nagelfar.berlios.de/) स्थिर टीसीएल सिंटैक्स चेकर के लिए एक और विकल्प है। – schlenk

+0

@ स्क्लेनक: +1; मुझे उस सूची को याद रखना चाहिए था। –

0

टीसीएल संकलन समय पर त्रुटियों को नहीं ढूंढता है, लेकिन हम regexp का उपयोग कर वाक्यविन्यास की जांच कर सकते हैं। पैटर्न "elseif {" से मिलान करें, यदि मौजूद है तो जांच करें कि "}" घुंघराले ब्रेस के भीतर कोई वर्ण है या नहीं। यदि कुछ भी मौजूद नहीं है तो एक त्रुटि संदेश मुद्रित करें।

0

टीसीएल स्थिर वाक्यविन्यास परीक्षक हैं जो ऐसी समस्याएं पा सकते हैं।

यहां इस तरह के checkes की सूची है: http://wiki.tcl.tk/3162

ttclchecker http://www.xdobry.de/ttclcheck इस छोटे से स्क्रिप्ट

stackoverflow.tcl:4: error in expression missing operator <<{}>> 
संबंधित मुद्दे