PParenWick
Рабочая среда с ИИ для кода

Ограниченный разбор S-выражений

ParenWick поддерживает диалоги о небольших парсерах с намеренно ограниченной грамматикой в проектах Windows. Попросите совместимую модель разобрать вложенность списков и правила атомов, затем проверьте S-выражения в коде, отделяя разбор от исполнения.

● ● ●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. Подключение

    Базовый URL, учётные данные и доступный сервер.

  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