С параметром направления 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