我有一个 JParsec 解析器,它由几个“较小”的解析器组成,我想提取用这些解析器解析的总值。比方说:
// V-- because of sequence()
private static final Parser<Object> definitionParser = sequence(
substitute, separator, digits4, separator, digits2, separator, description.optional()
);
上面的一些解析器是虚拟的,用于分隔数据字段。虚拟解析器是substitute
and separator
,我不会从中提取任何东西。但是,其余的解析器让我感兴趣:
private static final Parser<Short> digits4 = ...; // 4 hex digits, just a short value
private static final Parser<Byte> digits2 = ...; // 2 hex digits, just a byte value
private static final Parser<String> description = ...; // arbitrary string
但是,map
pingsubstituteDefinition
解析器需要一个Map<Object, Definition>
接口实现,将最后一个排序解析器的结果传播description.optional()
到Map
实现,并且传入的参数是String
:
private static final Parser<Definition> definitionParser = sequence(
substitute, separator, digits4, separator, digits2, separator, description.optional()
).map(new Map<Object, Definition>() {
@Override
public Definition map(final Object o) {
... o is a String here because description.optional() is the last one
}
});
显然,我只能description.optional()
在这里提取值,但我找不到到达digits4
和digits2
解析器结果的方法。我想知道:是否可以使用上述方法将digits4
,digits2
和description
值提取到单个对象中?Definition
我正在考虑构建器实现并以某种方式Definition
通过解析器链传递它。或者是否应该重新考虑,如果是,那么如何?