JParsec 3 を使用してバージョン番号の単純なパーサーを作成しようとしています。バージョン番号は次のようになります。
123
1.2.3
123.4
ルールは次のとおりです。
で区切られた最大 3 つの負でない整数
.
私はVersion
class
3つのファクトリメソッドを持っています:
Version.of(int major)
Version.of(int major, int minor)
Version.of(int major, int minor, int patch)
3 つのタイプのいずれかのバージョンのパーサーを書きたいと思います。
これが私がこれまでに持っているものです:
static final Parser<Integer> integerParser = Scanners.INTEGER
.map(x -> Integer.parseUnsignedInt(x));
static final Parser<Version> versionParser1 =
integerParser.map(x -> Version.of(x));
static final Parser<Version> versionParser2 =
Parsers.sequence(
integerParser.followedBy(Scanners.isChar('.')),
integerParser)
.map(x -> Version.of(x.get(0), x.get(1)));
static final Parser<Version> versionParser3 =
Parsers.sequence(
integerParser.followedBy(Scanners.isChar('.')),
integerParser.followedBy(Scanners.isChar('.')),
integerParser)
.map(x -> Version.of(x.get(0), x.get(1), x.get(2)));
public static final Parser<Version> versionParser =
versionParser1.or(versionParser2).or(versionParser3);
これは実際にはコンパイルされません。なぜなら、私が持っているx.get(0)
場所x
はInteger
.
ここで JParsec をどのように使用すればよいですか?