Package xyz.cofe.text.tparse
Interface GR<P extends Pointer<?,?,P>,T extends Tok<P>>
- Type Parameters:
P- Указатель на входную последовательность символовT- Токен/Лексема
- All Superinterfaces:
java.util.function.Function<P,java.util.Optional<T>>
- All Known Implementing Classes:
ProxyGR
public interface GR<P extends Pointer<?,?,P>,T extends Tok<P>>
extends java.util.function.Function<P,java.util.Optional<T>>
Граматическое правило - это токое правло согласно которому входная
последовтельность символов либо принадлежит (совпадает) с данным правилом , либо нет.
Где:
Примеры правил:
Правило идентификаторов языка java:
- идентифактор может содержать буквы, цифры и знак подчеркивания
- идентифактор должен начинаться с буквы или знака подчеркивания
идентификатор ::= (буква | подчеркивание) {буква | цифра | подчеркивание}
Где:
- Круглые скобки () - задают группу правил
- Фигурные скобки {} - задают, что содержание может повторяться 0 и более раз
- Вертикальная черта | - задает альтернативное правило
В коде java может быть представленно так:
GR letter = ...;
GR digit = ...;
GR underscope = ...;
GR firstIdSymbol = letter.another( underscope ).map();
GR otherIdSymbol = letter.another( underscope ).map().another( digit ).map();
GR id = firstIdSymbol.next(otherIdSymbol.repeat().map()).map().another(
firstIdSymbol
).map()
-
Method Summary
Modifier and Type Method Description default <U extends Tok<P>>
AltOP<P,U>another(GR<P,? extends Tok<P>> rule)Правило альтрентивного выбора - т.е. когда входная последовательность символов может быть распознана текущим правилом или альтернативнымdefault java.lang.Stringname()Возвращает имя правила.default GR<P,T>name(java.lang.String name)Указывает имя правила.default <U extends Tok<P>>
Sq2OP<P,T,U>next(GR<P,U> then)Создает новое правило - последовательность правил: текущего и последущего правила для анализа цепочкивходых символов.default RptOP<P,T>repeat()Создает правило из текущего - которое говорит о повторе 1 и более раз
-
Method Details
-
next
Создает новое правило - последовательность правил: текущего и последущего правила для анализа цепочкивходых символов.
Допустим текущее правило задает firstIdSymbol, то для создания id создадим правило id = this.next( otherIdSymbol.repeat() )- Type Parameters:
U- тип лексемы- Parameters:
then- следующее правило- Returns:
- Последовательность правил
-
repeat
Создает правило из текущего - которое говорит о повторе 1 и более раз- Returns:
- Правило повтора
-
another
Правило альтрентивного выбора - т.е. когда входная последовательность символов может быть распознана текущим правилом или альтернативным- Type Parameters:
U- токен- Parameters:
rule- алтернатиное правило- Returns:
- Альтернативное правило
-
name
Указывает имя правила. Желательно это правило переопределить, по умолчанию используется медленная реализацияGRNameImpl- Parameters:
name- имя- Returns:
- self ссылка
-
name
default java.lang.String name()Возвращает имя правила. Желательно это правило переопределить, по умолчанию используется медленная реализацияGRNameImpl- Returns:
- имя или null
-