PParenWick
Робоче середовище з ШІ для коду

Обмежений розбір 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. Моделі

    Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою 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
Робоче середовище з ШІ для коду

Зберігайте малу мову малою під час змін парсера

ParenWick — робоче середовище програмування з ШІ для Windows для розробки парсерів із навмисно обмеженими допустимими даними. Відкрийте проєкт і опишіть мову, яку програма має розпізнавати, зокрема де має зупинятися. Попросіть підключеного помічника дослідити поточний парсер і його споживача до пропозиції виправлення, щоб зручність реалізації непомітно не розширила мову.

Читач обмежених S-виразів — конкретний приклад. Обговоріть єдину форму в дужках, допустимий синтаксис атомів і подання вкладених списків. Додайте до запиту обмеження глибини й кількості вузлів разом із поведінкою за наявності додаткових форм після першої. Парсер повертає подання даних; його інтерпретація була б окремою частиною програми.

Перевіряйте пропозицію прийнятими й відхиленими прикладами разом, потім запустіть перевірки проєкту точно на межах і поза ними. Дослідіть обробку помилок так само ретельно, як успішний результат, щоб код виклику відрізняв неправильні дані від допустимого порожнього списку. ParenWick приймає підтримувані підключення, сумісні з OpenAI, або Anthropic з обліковими даними за потреби. Виберіть модель без обмежень, якщо вона пропонується, й перевірте підтримку контексту та інструментів сервером. Отримане виправлення має пояснюватися вашою граматикою, а не лише виглядати правдоподібно на одному виразі.

Зміни парсера та їхні межі

Що надати помічнику крім коректних прикладів?

Надайте відхилені приклади, допустимий синтаксис атомів і явні обмеження розміру, глибини й кількості вузлів. Укажіть передачу помилок коду виклику. Це дасть змогу перевірити збереження пропозицією задуманої межі мови.

Чи виконує читання виразу його вміст?

Наведене завдання розбирає дані на списки й рядки атомів. Воно не обчислює це подання. Визначайте виконання або інтерпретацію окремо й дослідіть подальший код до поєднання розібраних даних із будь-якою дією.

Як обробляти другу форму верхнього рівня?

Наявний контракт приймає одну форму в дужках і відхиляє додаткові. Додайте приклад із двома формами й перевірте врахування всіх даних, щоб зміна парсера непомітно не приймала коректний префікс, ігноруючи кінцевий матеріал.

Навіщо тестувати точно на межі вкладеності?

Це розрізняє найбільшу прийняту структуру й першу відхилену та може виявити помилку на одиницю. Так само перевірте межі вузлів і довжини даних, а потім підтвердьте, що відхилення дає відповідь, очікувану програмою виклику.

Завантажити для Windows ↗

ParenWick · Оновлено 2026-10-25