Skip to content

是否应该增加两个解析器尾处理器 flat,result #4

Description

@acodercc

之前已经添加了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:' '}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions