package com.googlecode.totallylazy.parser; import com.googlecode.totallylazy.Segment; import static com.googlecode.totallylazy.parser.Success.success; class StringParser implements Parser<String> { private final String expected; private StringParser(String expected) { this.expected = expected; } static StringParser string(String expected) { return new StringParser(expected); } @Override public Result<String> parse(Segment<Character> characters) { Segment<Character> segment = characters; StringBuilder result = new StringBuilder(); for (int i = 0, n = expected.length(); i < n; i++) { if(segment.isEmpty()) return fail(expected, result.toString()); char e = expected.charAt(i); char a = segment.head(); result.append(a); if (e != a) return fail(expected, result.toString()); segment = segment.tail(); } return success(result.toString(), segment); } @Override public String toString() { return expected; } }