PParenWick
พื้นที่เขียนโค้ดด้วย AI

แยกวิเคราะห์นิพจน์ S แบบจำกัด

แยกวิเคราะห์นิพจน์ S ในวงเล็บหนึ่งนิพจน์ที่ยาวไม่เกิน 4096 อักขระเป็นรายการและสตริงอะตอม ASCII.

● ● ●ParenWick●
ขั้นตอนการทำงาน · แยกวิเคราะห์นิพจน์ S แบบจำกัด ×
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
✳แยกวิเคราะห์นิพจน์ S แบบจำกัด
✓ การเปลี่ยนแปลงตรวจสอบก่อนนำไปใช้ ↗
ภาพประกอบพื้นที่ทำงาน
  1. โมเดล

    ตั้งค่า endpoint ที่รองรับ OpenAI หรือ Anthropic ด้วย URL หลักและคีย์ API หากจำเป็น ทดสอบการเชื่อมต่อ เซิร์ฟเวอร์โมเดลในเครื่องต้องทำงานอยู่ เครื่องมือระยะไกลอาจส่งข้อมูลแยกต่างหาก

  2. โปรเจกต์

    ทดสอบรายการว่าง ความลึก 16 และ 1024 โหนด แล้วปฏิเสธรูปแบบส่วนเกิน รายการที่ไม่ปิดและไวยากรณ์อัญประกาศที่ไม่รองรับโดยไม่ประมวลผลนิพจน์.

  3. ตรวจสอบก่อนนำไปใช้

    เปรียบเทียบการทำงานจริงกับผลที่คาดหวัง หากการตรวจสอบไม่ผ่าน ให้หาสาเหตุก่อนแก้ไขเพิ่มเติม

ขั้นตอนการทำงาน

แยกวิเคราะห์นิพจน์ S แบบจำกัด

ขั้นตอนการทำงาน ↗
ขั้นตอนการทำงาน
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
พื้นที่เขียนโค้ดด้วย AI

คงภาษาขนาดเล็กให้เล็กขณะเปลี่ยนตัวแยก

ParenWick เป็นพื้นที่เขียนโค้ดด้วย AI บน Windows สำหรับพัฒนาตัวแยกที่ตั้งใจจำกัดข้อมูลเข้าที่ยอมรับ เปิดโครงการและอธิบายภาษาที่แอปควรรู้จัก รวมจุดที่ต้องหยุด ขอให้ผู้ช่วยที่เชื่อมต่อตรวจตัวแยกปัจจุบันและฝั่งใช้ผลก่อนเสนอแพตช์ เพื่อไม่ให้ความสะดวกในการเขียนขยายภาษาโดยเงียบ ๆ

ตัวอ่าน S-expression ที่จำกัดขอบเขตเป็นตัวอย่างชัดเจน หารือรูปแบบวงเล็บหนึ่งชุด ไวยากรณ์อะตอมที่อนุญาต และการแทนรายการซ้อน รวมขีดจำกัดความลึกและจำนวนโหนดในคำขอ พร้อมสิ่งที่เกิดเมื่อมีรูปแบบอื่นต่อท้ายชุดแรก ตัวแยกคืนรูปแบบแทนข้อมูลเข้า การตีความรูปแบบนั้นเป็นอีกส่วนหนึ่งของแอป

ตรวจข้อเสนอด้วยกรณียอมรับและปฏิเสธร่วมกัน แล้วรันการตรวจโครงการที่ขีดจำกัดพอดีและเกินขีดจำกัด ตรวจการจัดการข้อผิดพลาดอย่างรอบคอบเท่าผลสำเร็จ เพื่อให้ฝั่งเรียกใช้แยกข้อมูลผิดรูปจากรายการว่างที่ถูกต้องได้ ParenWick รับการเชื่อมต่อ OpenAI-compatible หรือ Anthropic ที่รองรับ พร้อมข้อมูลรับรองเมื่อจำเป็น เลือกโมเดลไร้ข้อจำกัดเมื่อมีให้และตรวจการรองรับบริบทกับเครื่องมือของเซิร์ฟเวอร์ แพตช์ที่ได้ควรอธิบายเทียบไวยากรณ์ของคุณได้ ไม่ใช่แค่ดูใช้ได้กับนิพจน์ตัวอย่างเดียว

การเปลี่ยนตัวแยกและขอบเขตของมัน

ควรให้อะไรแก่ผู้ช่วยนอกจากตัวอย่างที่ถูกต้อง

ให้ตัวอย่างที่ต้องปฏิเสธ ไวยากรณ์อะตอมที่อนุญาต และขีดจำกัดขนาด ความลึก และโหนดที่ชัดเจน ระบุว่าข้อผิดพลาดถึงฝั่งเรียกใช้อย่างไร เพื่อให้ตรวจได้ว่าแพตช์ที่เสนอรักษาขอบเขตภาษาที่ตั้งใจหรือไม่

การอ่านนิพจน์รันเนื้อหาของมันหรือไม่

งานตัวอย่างแยกข้อมูลเข้าเป็นรายการและสตริงอะตอม ไม่ได้ประเมินค่ารูปแบบนั้น กำหนดการรันหรือการตีความเป็นพฤติกรรมแยก และตรวจโค้ดปลายทางก่อนเชื่อมข้อมูลที่แยกกับการกระทำใด ๆ

ควรจัดการรูปแบบระดับบนชุดที่สองอย่างไร

ข้อกำหนดเดิมรับรูปแบบวงเล็บหนึ่งชุดและปฏิเสธส่วนเกิน รวมกรณีทดสอบสองชุดและตรวจว่าพิจารณาข้อมูลเข้าทั้งหมด เพื่อไม่ให้การเปลี่ยนตัวแยกยอมรับเฉพาะส่วนต้นที่ถูกต้องแล้วละเลยส่วนท้ายโดยเงียบ

เหตุใดต้องทดสอบที่ขีดจำกัดการซ้อนพอดี

ช่วยแยกโครงสร้างใหญ่ที่สุดที่ยอมรับจากชุดแรกที่ปฏิเสธ และอาจเผยการเปลี่ยนที่คลาดหนึ่งตำแหน่ง ทำแบบเดียวกันกับขีดจำกัดโหนดและความยาวข้อมูลเข้า แล้วยืนยันว่าการปฏิเสธให้การตอบสนองที่แอปฝั่งเรียกใช้คาดหวัง

ดาวน์โหลดสำหรับ Windows ↗

ParenWick · อัปเดต 2026-10-25