تحليل مقيد لتعبيرات S
حلّل تعبير S واحداً محاطاً بأقواس بطول لا يتجاوز 4096 محرفاً إلى قوائم وسلاسل ذرات 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
النماذج
اضبط نقطة اتصال متوافقة مع OpenAI أو Anthropic باستخدام العنوان الأساسي ومفتاح API عند الحاجة. اختبر الاتصال. يجب أن يعمل خادم النموذج المحلي؛ وقد ترسل الأدوات البعيدة البيانات بشكل منفصل.
المشروع
اختبر القوائم الفارغة والعمق 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 محدود مثالا ملموسا. ناقش صيغة واحدة محاطة بأقواس وصياغة الذرات المسموح بها وتمثيل القوائم المتداخلة. أدرج حدود العمق وعدد العقد في الطلب، إلى جانب ما يحدث إذا تبعت الصيغة الأولى صيغ إضافية. يعيد المحلّل تمثيلا للمدخل؛ وتفسير هذا التمثيل جزء منفصل من تطبيقك.
راجع المقترح باستخدام حالات مقبولة ومرفوضة معا، ثم شغّل فحوص المشروع عند الحدود الدقيقة وبعدها. افحص معالجة الأخطاء بعناية تضاهي المخرجات الناجحة كي يميّز المستدعون المدخل المشوه من قائمة فارغة صحيحة. يقبل ParenWick اتصالات مدعومة متوافقة مع OpenAI أو تابعة لـ Anthropic، مع بيانات اعتماد عند الحاجة. اختر نموذجا بلا قيود حيث يتوفر وافحص دعم الخادم للسياق والأدوات. ينبغي أن يكون الترقيع الناتج قابلا للشرح وفق قواعدك، لا مجرد معقول على تعبير نموذجي واحد.
تغييرات المحلّل وحدودها
ماذا أقدّم للمساعد إلى جانب الأمثلة الصحيحة؟
قدّم أمثلة مرفوضة وصياغة الذرات المسموح بها وحدودا صريحة للحجم والعمق وعدد العقد. حدّد كيف تصل الأخطاء إلى المستدعي. يتيح ذلك مراجعة حفاظ الترقيع المقترح على حدود اللغة المقصودة.
هل تنفّذ قراءة التعبير محتوياته؟
تحلل المهمة الموضحة المدخل إلى قوائم وسلاسل ذرات. ولا تقيّم هذا التمثيل. أبق التنفيذ أو التفسير سلوكا محددا بصورة منفصلة وافحص الشيفرة اللاحقة قبل ربط المدخل المحلّل بأي إجراء.
كيف يجب أن تُعالج صيغة ثانية في المستوى الأعلى؟
يقبل العقد الحالي صيغة واحدة محاطة بأقواس ويرفض الإضافات. أدرج حالة بصيغتين وافحص أخذ المدخل كاملا في الحسبان، كي لا يقبل تغيير المحلّل بادئة صحيحة ويتجاهل المادة اللاحقة بصمت.
لماذا نختبر عند حد التداخل تماما؟
يميّز ذلك أكبر بنية مقبولة من أول بنية مرفوضة وقد يكشف أخطاء الإزاحة بواحد. افعل الشيء نفسه لحدود العقد وطول المدخل ثم تحقق من أن الرفض ينتج الاستجابة المتوقعة لدى التطبيق المستدعي.
ParenWick · آخر تحديث 2026-10-25