Соответствие регулярному выражению в редукторе - PullRequest
1 голос
/ 07 февраля 2020

Я смотрю на редукторы.

В репетиторе есть хороший пример для подсчета слов:

(0 | it + 1 | /\w+/ := S)

, где S немного больше Строка с несколькими словами. Редуктор возвращает количество таких слов.

Мне было интересно, как захватить соответствующую подстроку и использовать ее в накопительном выражении, что-то вроде

("" | it + e | str e ... /\w+/ := S)

, чтобы результат был объединение всех подходящих подстрок.

Есть идеи?

1 Ответ

1 голос
/ 07 февраля 2020

Да, синтаксис захвата с примечанием <name:regex>:

("" | it + e | /<e:\w+>/ := S)

rascal>S  ="Jabberwocky by Lewis Carroll";
str: "Jabberwocky by Lewis Carroll"
rascal>("" | "<it>,<e>" | /<e:\w+>/ := S)[1..]
str: "Jabberwocky,by,Lewis,Carroll"

или используйте синтаксис for-template вместо выражения-редуктора:

rascal>x = "<for (/<e:\w+>/ := S) {><e>;
>>>>>>>    '<}>";
str: "Jabberwocky;\nby;\nLewis;\nCarroll;\n"
rascal>import IO;
ok
rascal>println(x)
Jabberwocky;
by;
Lewis;
Carroll;

ok
rascal>
...