-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
之前已经添加了seqJoin这个解析器的尾处理器,与以下两个解析器尾处理器的连续调用是等价的:
var p1 = jcon.string('1');
var p2 = jcon.string('2');
var p12 = jcon.seq(p1, p2);
p12.parse('12'); // 结果是['1','2'] 使用数组保存每个被结合的解析器的解析结果
var joined_p12 = p12.joinValue();
joined_p12.parse('12'); //结果是"12",将解析器的value数组进行join的“尾处理”。
jcon.seqJoin(p1, p2).parse('12'); //结果是"12",seqJoin等价于seq().joinValue(),是两个内dsl的结合现在出现了新的需求,需要设计新的内部dsl来表现需求:
var p1 = jcon.string('1');
var p2 = jcon.string('2');
var p3 = jcon.string('3');
jcon.seq(p1, p2).seq(p3).parse('123'); // [['1','2'], '3'] 没有平坦化的数据
jcon.seq(p1, p2).seq(p3).flat().parse('123'); // ['1', '2', '3'] 需要对当前层次的value进行平坦化另外,有一个需求是需要直接设置value的:
var whitespace = jcon.regex(/ \r\n\t\f+/);
whitespace.parse(' '); //parse到了3个空白字符
whitespace.value(' ').parse(' ');// 无论parse到多少个空白字符,都返回{success:true, value:' '}Metadata
Metadata
Assignees
Labels
No labels