Глубокая маркировка параметров внутри группы pegjs regex

Рассмотрим следующую грамматику:

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) регулярное выражение группы?

1 ответ

Вы действительно можете пометить, что внутри группы (i: ниже), расскажите PEGJS, что именно нужно вернуть ({return i;}), а также пометить результат (tail:).

list
 = head:item tail:(',' i:item {return i;})*
 { return [head].concat(tail); }
Другие вопросы по тегам