सीमित S-अभिव्यक्ति पार्सिंग
अधिकतम 4096 अक्षरों की एक कोष्ठकबद्ध S-अभिव्यक्ति को सूचियों और ASCII परमाणु स्ट्रिंग में पार्स करें।
import re
def read_sexpression(text):
if type(text) is not str or len(text) > 4096:
raise ValueError("sexpr.input")
stack, result, count = [], None, 0
for match in re.finditer(r"\(|\)|[^\s()]+", text):
token = match[0]
if token == "(":
if len(stack) == 16 or (not stack and result is not None):
raise ValueError("sexpr.depth")
item = []
if stack:
stack[-1].append(item)
stack.append(item)
count += 1
elif token == ")":
if not stack:
raise ValueError("sexpr.close")
item = stack.pop()
if not stack:
result = item
else:
if not stack or re.fullmatch(r"[A-Za-z_][A-Za-z0-9_-]*|[+-]?[0-9]+", token) is None:
raise ValueError("sexpr.atom")
stack[-1].append(token)
count += 1
if count > 1024:
raise ValueError("sexpr.nodes")
if stack or result is None:
raise ValueError("sexpr.unclosed")
return result
मॉडल
बेस URL और आवश्यक होने पर API कुंजी से OpenAI-संगत या Anthropic endpoint सेट करें। कनेक्शन जाँचें। स्थानीय मॉडल सर्वर चालू होना चाहिए; दूरस्थ उपकरण अलग से डेटा भेज सकते हैं।
प्रोजेक्ट
खाली सूची, गहराई 16 और 1024 नोड जाँचें; कुछ भी निष्पादित किए बिना अतिरिक्त रूप, अधूरी सूची और असमर्थित उद्धरण सिंटैक्स अस्वीकार करें।
लागू करने से पहले समीक्षा करें
वास्तविक व्यवहार की अपेक्षित परिणाम से तुलना करें। जाँच असफल हो तो अगले बदलाव से पहले कारण समझें।
import re
def read_sexpression(text):
if type(text) is not str or len(text) > 4096:
raise ValueError("sexpr.input")
stack, result, count = [], None, 0
for match in re.finditer(r"\(|\)|[^\s()]+", text):
token = match[0]
if token == "(":
if len(stack) == 16 or (not stack and result is not None):
raise ValueError("sexpr.depth")
item = []
if stack:
stack[-1].append(item)
stack.append(item)
count += 1
elif token == ")":
if not stack:
raise ValueError("sexpr.close")
item = stack.pop()
if not stack:
result = item
else:
if not stack or re.fullmatch(r"[A-Za-z_][A-Za-z0-9_-]*|[+-]?[0-9]+", token) is None:
raise ValueError("sexpr.atom")
stack[-1].append(token)
count += 1
if count > 1024:
raise ValueError("sexpr.nodes")
if stack or result is None:
raise ValueError("sexpr.unclosed")
return result
पार्सर बदलते समय छोटी भाषा को छोटा रखें
ParenWick जानबूझकर सीमित स्वीकृत इनपुट वाले पार्सर विकसित करने का Windows एआई कोडिंग कार्यक्षेत्र है। प्रोजेक्ट खोलें और अनुप्रयोग द्वारा पहचानी जाने वाली भाषा बताएँ, जिसमें कहाँ रुकना है यह भी हो। पैच सुझाने से पहले जुड़े सहायक से वर्तमान पार्सर और उपभोक्ता जाँचने को कहें, ताकि कार्यान्वयन की सुविधा चुपचाप भाषा न बढ़ा दे।
सीमित S-expression रीडर एक ठोस उदाहरण है। एक कोष्ठकबद्ध रूप, अनुमत ऐटम वाक्यरचना और नेस्टेड सूचियों के निरूपण पर चर्चा करें। अनुरोध में गहराई और नोड सीमाएँ तथा पहले के बाद अतिरिक्त रूप आने पर व्यवहार शामिल करें। पार्सर इनपुट का निरूपण लौटाता है; उसका अर्थ निकालना अनुप्रयोग का अलग भाग होगा।
स्वीकृत और अस्वीकृत उदाहरण साथ लेकर प्रस्ताव जाँचें, फिर ठीक सीमाओं पर और उनसे आगे प्रोजेक्ट परीक्षण चलाएँ। सफल आउटपुट जितनी सावधानी से त्रुटि प्रबंधन देखें ताकि कॉलर विकृत इनपुट और वैध खाली सूची में अंतर कर सकें। ParenWick आवश्यक क्रेडेंशियल के साथ समर्थित OpenAI-संगत या Anthropic कनेक्शन स्वीकारता है। उपलब्ध हो तो अप्रतिबंधित मॉडल चुनें और सर्वर का संदर्भ व टूल समर्थन जाँचें। परिणामी पैच आपके व्याकरण के अनुसार समझाया जा सके, केवल एक नमूना व्यंजक पर उचित न लगे।
पार्सर बदलाव और उनकी सीमाएँ
वैध उदाहरणों के अलावा सहायक को क्या दूँ?
अस्वीकृत उदाहरण, अनुमत ऐटम वाक्यरचना तथा स्पष्ट आकार, गहराई और नोड सीमाएँ दें। बताएँ कि त्रुटियाँ कॉलर तक कैसे जाती हैं। इससे जाँचा जा सकता है कि प्रस्तावित पैच अपेक्षित भाषा सीमा सुरक्षित रखता है या नहीं।
क्या व्यंजक पढ़ने से उसकी सामग्री निष्पादित होती है?
उदाहरण का कार्य इनपुट को सूचियों और ऐटम स्ट्रिंग में पार्स करता है। वह उस निरूपण का मूल्यांकन नहीं करता। निष्पादन या अर्थ निकालने का व्यवहार अलग निर्दिष्ट रखें और पार्स किए इनपुट को कार्रवाई से जोड़ने से पहले आगे का कोड जाँचें।
दूसरे शीर्ष-स्तरीय रूप का व्यवहार क्या हो?
मौजूदा अनुबंध एक कोष्ठकबद्ध रूप स्वीकारता है और अतिरिक्त रूप अस्वीकारता है। दो रूपों वाला उदाहरण दें और जाँचें कि पूरा इनपुट देखा जाता है, ताकि पार्सर बदलाव वैध उपसर्ग स्वीकारकर पीछे की सामग्री चुपचाप न छोड़े।
ठीक नेस्टिंग सीमा पर परीक्षण क्यों करें?
यह सबसे बड़ी स्वीकृत संरचना और पहली अस्वीकृत संरचना अलग करता है तथा एक इकाई की सीमा त्रुटि दिखा सकता है। नोड और इनपुट लंबाई सीमाओं पर भी ऐसा करें, फिर सत्यापित करें कि अस्वीकृति से कॉल करने वाले अनुप्रयोग का अपेक्षित उत्तर मिलता है।
ParenWick · अपडेट किया गया 2026-10-25