(in-package #:monparser) (defclass parser-input () ((cursor :initarg :cursor :accessor input-cursor :initform 0) (data :initarg :data :reader input-data :initform nil))) (defun has-data? (input) (< (input-cursor input) (length (input-data input)))) (defun peek (input) (char (input-data input) (input-cursor input))) (defun advance (input) (make-instance 'parser-input :data (input-data input) :cursor (+ (input-cursor input) 1))) (defun cursor-distance (input1 input2) (- (input-cursor input1) (input-cursor input2)))