Вы пытаетесь реализовать «желание» копирования с использованием PARSE. PARSE COPY ищет шаблоны, а не рассматривает серию как позиции.
Вы можете выйти в DO в середине разбора через PAREN !, он запустится, если правило разбора достигнет этой точки.
src: {a b c d e f}
rule: [
to "b" mark1: thru "e" mark2:
(text: copy/part mark1 mark2)
to end ;-- not strictly necessary, but makes PARSE return true
]
parse src rule
Это даст вам текст как b c d e
Обратите внимание, что вы не можете использовать оба способа, либо с помощью COPY, либо с TO. TO <series!>
означало «искать b», а не «переходить на позицию b». Поэтому, когда вы говорите to mark1
, вы вызываете другой матч. Если вы хотите установить для позиции разбора конкретную позицию , записанную в mark1, используйте :mark1
в правиле разбора.