В Rebol PARSE, как проверить начало ввода? - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно правило, пусть оно называется AT-BEGIN, совпадающее с началом ввода.

Может быть, оно существует или как его реализовать?

ПРИМЕРЫ, КОТОРЫЕ Я ХОЧУ РАБОТАТЬ:

  1. parse "x" [AT-BEGIN "x"] => match
  2. parse "{some-other-chars} x" [to "x" AT-BEGIN "x "] => no-match

MOTIVATION:

Я пытаюсь разобрать некоторые похожие на уценку паттерны, где '*' начинает акцентировать, но только если после пробелаили в начале текста: [пробел |в начале] выделение

Используя решение @hostilefork, я мог написать: [to "*" pos: [if (head? pos) | (pos: back pos) :pos space] skip ...]

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Возможно, это не совсем то, что вам нужно, но найти первое совпадение можно следующим образом:

Вам нужно найти образец дополнения к «b», за которым следует «a».

>> text-to-searh: "jjjj ball  adran"
>> b*: complement charset "b"
>> parse/all text-to-search [ any [ b* #"a" | "a" hit:  to end | skip ] ]
>> probe hit
"ll  adran"

Требуется некоторая модификация, чтобы соответствовать случаю, когда первый символ "a".hit будет располагаться на символе, следующем за «а».

0 голосов
/ 18 сентября 2018

Нет такого правила.Но если бы это было так, вам нужно было бы определить, хотите ли вы конкретно узнать, находится ли это в начале серии ... или в начале того, откуда вас попросили начать анализ.например, должно ли это быть успешным или неудачным?

parse (next "cab") [to "a" begin skip "b"]

Это не в начале серии , а позиция разбора не сместилась.Это считается началом?

Если вы хотите провести тест только для начала серии:

[to "a" pos: if (head? pos) ...]

Вы должны захватить позицию в начале или иначе узнать еечтобы увидеть, изменилась ли вообще позиция разбора:

[start: to "a" pos: if (pos = start) ...]
...