EndOfInputScanner.java
package org.sterling.source.scanner;
import static org.sterling.source.Location.at;
import static org.sterling.source.LocationRange.between;
import static org.sterling.source.scanner.ScannerUtil.unexpectedInput;
import static org.sterling.source.syntax.Token.token;
import org.sterling.SterlingException;
import org.sterling.source.Location;
import org.sterling.source.syntax.NodeKind;
import org.sterling.source.syntax.Token;
public class EndOfInputScanner implements ScannerDelegate {
@Override
public boolean expect(NodeKind kind, InputReader reader) {
return reader.expect('\0');
}
@Override
public Token require(NodeKind kind, InputReader reader) throws SterlingException {
if (expect(kind, reader)) {
Location start = reader.getLocation();
return token(kind, "\0", between(start, at(
start.getSource(),
start.getLine(),
start.getColumn() + 1
)));
} else {
throw unexpectedInput(reader, kind);
}
}
}