Reducer 中的正则表达式匹配

Regexp Matching in Reducer

我在看减速器。

有一个nice example in the Tutor用来统计字数:

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

其中 S 是包含多个单词的较长字符串。 reducer returns 此类单词的计数。

我想知道如何捕获匹配的子字符串并将其用于累加表达式,例如

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

因此结果将是所有匹配子字符串的串联。

有什么想法吗?

是的,捕获语法使用 <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 语法代替 reducer 表达式:

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>