ECMAScript | Альтернатива (Alternative) | Регулярные выражения (Regular Expression)

С параметром направления direction.

Производство Alternative :: [empty] оценивается следующим образом:

1. Верните новый Matcher с параметрами (x, c), который ничего не захватывает и при вызове выполняет следующие шаги:
   a. Утвердить: x является состоянием State.
   b. Утвердить: c является продолжением Continuation.
   c. Вернуть c(x).


Производство Alternative :: Alternative Term оценивается следующим образом:

1. Оцените Альтернативу Alternative с аргументом направления direction, чтобы получить Сопоставитель (Matcher) m1.
2. Оцените Прекращение Term с аргументом направления direction, чтобы получить Сопоставитель (Matcher) m2.
3. Если direction = 1, то
   а. Верните новый Matcher с параметрами (x, c), который захватывает m1 и m2 и при вызове выполняет следующие шаги:
      i. Утвердить: x является состоянием State.
      ii. Утвердить: c является продолжением Continuation.
      iii. Пусть d будет новым продолжением с параметрами (y), которое захватывает c и m2 и при вызове выполняет следующие шаги:
         1. Утвердить: y - Состояние State.
         2. Вернуть m2(y, c).
      iv. Вернуть m1(x, d).
4. Иначе,
   а. Утвердить: direction равен -1.
   b. Вернуть новый Matcher с параметрами (x, c), который захватывает m1 и m2 и при вызове выполняет следующие шаги:
      i. Утвердить: x является состоянием State.
      ii. Утвердить: c является продолжением Continuation.
      iii. Пусть d будет новым продолжением с параметрами (y), которое захватывает c и m1 и при вызове выполняет следующие шаги:
         1. Утвердить: y - Состояние State.
         2. Верните m1(y, c).
      iv. Верните m2(x, d).
Примечание

Последовательные Прекращения Term пытаются одновременно сопоставить последовательные части ввода Input. Когда direction = 1, если левая Альтернатива Alternative, правое Прекращение Term и продолжение регулярного выражения имеют точки выбора, все варианты в продолжении проверяются перед переходом к следующему варианту в правом термине и всем вариантам выбора в правом Прекращении Term проверяется перед переходом к следующему варианту в левой Альтернативе Alternative. Когда direction = -1, порядок оценки Альтернативы Alternative и Прекращения Term меняется на противоположный.

Информационные ссылки

Стандарт ECMAScript — Раздел «Alternative» — https://tc39.es/ecma262/#sec-alternative

Поделись записью