PParenWick
Środowisko programowania z AI

Ograniczone parsowanie S-wyrażeń

Sparsuj jedno S-wyrażenie w nawiasach do 4096 znaków do list i atomów ASCII.

● ● ●ParenWick●
Sposoby pracy · Ograniczone parsowanie S-wyrażeń ×
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
✳Ograniczone parsowanie S-wyrażeń
✓ ZmianySprawdź przed zastosowaniem ↗
Ilustracja środowiska
  1. Modele

    Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.

  2. Projekt

    Sprawdź puste listy, głębokość 16 i 1024 węzły, odrzucając dodatkowe formy, niedomknięte listy i cudzysłowy bez wykonywania.

  3. Sprawdź przed zastosowaniem

    Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.

Sposoby pracy

Ograniczone parsowanie S-wyrażeń

Sposoby pracy ↗
Sposoby pracy
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
Środowisko programowania z AI

Zachowaj mały zakres języka podczas zmian parsera

ParenWick to środowisko programowania z AI dla Windows do tworzenia parserów o celowo ograniczonym akceptowanym wejściu. Otwórz projekt i opisz język, który aplikacja ma rozpoznawać, w tym miejsce, gdzie musi się zatrzymać. Poproś podłączonego asystenta o sprawdzenie obecnego parsera i kodu odbierającego przed zaproponowaniem poprawki, aby wygoda implementacji nie rozszerzyła języka po cichu.

Czytnik S-wyrażeń z ograniczeniami stanowi konkretny przykład. Omów pojedynczą formę w nawiasach, dozwoloną składnię atomów i reprezentację zagnieżdżonych list. Uwzględnij w zadaniu limity głębokości i liczby węzłów oraz zachowanie przy dodatkowych formach po pierwszej. Parser zwraca reprezentację wejścia; interpretowanie jej byłoby oddzielną częścią aplikacji.

Oceń propozycję przy użyciu razem akceptowanych i odrzucanych testów, a następnie uruchom kontrole projektu dokładnie na limitach i poza nimi. Sprawdź obsługę błędów równie uważnie jak poprawne wyniki, aby kod wywołujący rozróżniał błędne dane i poprawną pustą listę. ParenWick przyjmuje obsługiwane połączenia zgodne z OpenAI lub Anthropic, z danymi uwierzytelniającymi w razie potrzeby. Wybierz model bez ograniczeń tam, gdzie jest oferowany, i sprawdź obsługę kontekstu oraz narzędzi przez serwer. Wynikowa poprawka powinna dać się wyjaśnić względem gramatyki, a nie tylko wyglądać wiarygodnie dla jednego przykładowego wyrażenia.

Zmiany parsera i ich granice

Co przekazać asystentowi oprócz poprawnych przykładów?

Podaj przykłady odrzucane, dozwoloną składnię atomów i jawne limity rozmiaru, głębokości oraz liczby węzłów. Określ sposób przekazywania błędów do kodu wywołującego. Umożliwia to ocenę, czy proponowana poprawka zachowuje zamierzone granice języka.

Czy odczyt wyrażenia wykonuje jego zawartość?

Przykładowe zadanie parsuje wejście do list i ciągów atomów. Nie oblicza wartości tej reprezentacji. Określ wykonywanie lub interpretację jako oddzielne zachowanie i sprawdź dalszy kod przed połączeniem sparsowanego wejścia z jakimkolwiek działaniem.

Jak traktować drugą formę najwyższego poziomu?

Istniejący kontrakt akceptuje jedną formę w nawiasach i odrzuca dodatkowe. Uwzględnij test z dwiema formami i sprawdź uwzględnianie całego wejścia, aby zmiana parsera nie akceptowała po cichu poprawnego prefiksu, ignorując końcowy materiał.

Dlaczego testować dokładnie na limicie zagnieżdżenia?

Rozróżnia to największą akceptowaną strukturę od pierwszej odrzucanej i może ujawnić błędy o jeden. Zrób to samo dla limitów węzłów i długości wejścia, a następnie sprawdź, czy odrzucenie daje reakcję oczekiwaną przez aplikację wywołującą.

Pobierz dla Windows ↗

ParenWick · Zaktualizowano 2026-10-25