0

考虑以下语法:

list
 = head:item (',' tail:item)*
 { return [head].concat(tail); }

item
 = $ ([0-9]*)

它应该描述正整数列表。

问题是tail未定义,因为它在括号内。

所以我不得不做以下事情:

list
 = head:item tail:tail*
 { return [head].concat(tail); }

tail
 = ',' item:item
 { return item; }

item
 = $ ([0-9]*)

这在较长的语法中可能非常麻烦。

有没有办法标记(',' item)正则表达式组内的内容?

4

1 回答 1

3

您确实可以标记组内的内容(i:如下),确切地告诉 PEGJS 要返回什么({return i;}),并标记结果(tail:)。

list
 = head:item tail:(',' i:item {return i;})*
 { return [head].concat(tail); }
于 2019-01-28T16:04:04.340 回答